Upload Tizen:Main source 2.0alpha master 2.0_alpha
authorKim Kibum <kb0929.kim@samsung.com>
Mon, 21 May 2012 09:00:13 +0000 (18:00 +0900)
committerKim Kibum <kb0929.kim@samsung.com>
Mon, 21 May 2012 09:00:13 +0000 (18:00 +0900)
284 files changed:
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
COPYING.LIB [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
GNUmakefile [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
THANKS [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
build-aux/arg-nonnull.h [new file with mode: 0644]
build-aux/c++defs.h [new file with mode: 0644]
build-aux/config.guess [new file with mode: 0755]
build-aux/config.sub [new file with mode: 0755]
build-aux/depcomp [new file with mode: 0755]
build-aux/gendocs.sh [new file with mode: 0755]
build-aux/install-sh [new file with mode: 0755]
build-aux/ltmain.sh [new file with mode: 0755]
build-aux/mdate-sh [new file with mode: 0755]
build-aux/missing [new file with mode: 0755]
build-aux/pmccabe.css [new file with mode: 0644]
build-aux/pmccabe2html [new file with mode: 0644]
build-aux/texinfo.tex [new file with mode: 0644]
build-aux/update-copyright [new file with mode: 0755]
build-aux/useless-if-before-free [new file with mode: 0755]
build-aux/vc-list-files [new file with mode: 0755]
build-aux/warn-on-use.h [new file with mode: 0644]
build-aux/ylwrap [new file with mode: 0755]
cfg.mk [new file with mode: 0644]
config.h.in [new file with mode: 0644]
configure [new file with mode: 0755]
configure.ac [new file with mode: 0644]
doc/Makefile.am [new file with mode: 0644]
doc/Makefile.in [new file with mode: 0644]
doc/TODO [new file with mode: 0644]
doc/asn1Coding.1 [new file with mode: 0644]
doc/asn1Decoding.1 [new file with mode: 0644]
doc/asn1Parser.1 [new file with mode: 0644]
doc/cyclo/Makefile.am [new file with mode: 0644]
doc/cyclo/Makefile.in [new file with mode: 0644]
doc/cyclo/cyclo-libtasn1.html [new file with mode: 0644]
doc/fdl-1.3.texi [new file with mode: 0644]
doc/gdoc [new file with mode: 0755]
doc/libtasn1.html [new file with mode: 0644]
doc/libtasn1.info [new file with mode: 0644]
doc/libtasn1.pdf [new file with mode: 0644]
doc/libtasn1.ps [new file with mode: 0644]
doc/libtasn1.texi [new file with mode: 0644]
doc/man/asn1_array2tree.3 [new file with mode: 0644]
doc/man/asn1_bit_der.3 [new file with mode: 0644]
doc/man/asn1_check_version.3 [new file with mode: 0644]
doc/man/asn1_copy_node.3 [new file with mode: 0644]
doc/man/asn1_create_element.3 [new file with mode: 0644]
doc/man/asn1_delete_element.3 [new file with mode: 0644]
doc/man/asn1_delete_structure.3 [new file with mode: 0644]
doc/man/asn1_der_coding.3 [new file with mode: 0644]
doc/man/asn1_der_decoding.3 [new file with mode: 0644]
doc/man/asn1_der_decoding_element.3 [new file with mode: 0644]
doc/man/asn1_der_decoding_startEnd.3 [new file with mode: 0644]
doc/man/asn1_expand_any_defined_by.3 [new file with mode: 0644]
doc/man/asn1_expand_octet_string.3 [new file with mode: 0644]
doc/man/asn1_find_node.3 [new file with mode: 0644]
doc/man/asn1_find_structure_from_oid.3 [new file with mode: 0644]
doc/man/asn1_get_bit_der.3 [new file with mode: 0644]
doc/man/asn1_get_length_ber.3 [new file with mode: 0644]
doc/man/asn1_get_length_der.3 [new file with mode: 0644]
doc/man/asn1_get_octet_der.3 [new file with mode: 0644]
doc/man/asn1_get_tag_der.3 [new file with mode: 0644]
doc/man/asn1_length_der.3 [new file with mode: 0644]
doc/man/asn1_number_of_elements.3 [new file with mode: 0644]
doc/man/asn1_octet_der.3 [new file with mode: 0644]
doc/man/asn1_parser2array.3 [new file with mode: 0644]
doc/man/asn1_parser2tree.3 [new file with mode: 0644]
doc/man/asn1_perror.3 [new file with mode: 0644]
doc/man/asn1_print_structure.3 [new file with mode: 0644]
doc/man/asn1_read_tag.3 [new file with mode: 0644]
doc/man/asn1_read_value.3 [new file with mode: 0644]
doc/man/asn1_strerror.3 [new file with mode: 0644]
doc/man/asn1_write_value.3 [new file with mode: 0644]
doc/man/libtasn1_perror.3 [new file with mode: 0644]
doc/man/libtasn1_strerror.3 [new file with mode: 0644]
doc/reference/Makefile.am [new file with mode: 0644]
doc/reference/Makefile.in [new file with mode: 0644]
doc/reference/html/ch01.html [new file with mode: 0644]
doc/reference/html/home.png [new file with mode: 0644]
doc/reference/html/index.html [new file with mode: 0644]
doc/reference/html/index.sgml [new file with mode: 0644]
doc/reference/html/ix01.html [new file with mode: 0644]
doc/reference/html/ix02.html [new file with mode: 0644]
doc/reference/html/ix03.html [new file with mode: 0644]
doc/reference/html/ix04.html [new file with mode: 0644]
doc/reference/html/left.png [new file with mode: 0644]
doc/reference/html/libtasn1-libtasn1.html [new file with mode: 0644]
doc/reference/html/libtasn1.devhelp [new file with mode: 0644]
doc/reference/html/libtasn1.devhelp2 [new file with mode: 0644]
doc/reference/html/right.png [new file with mode: 0644]
doc/reference/html/style.css [new file with mode: 0644]
doc/reference/html/up.png [new file with mode: 0644]
doc/reference/libtasn1-docs.sgml [new file with mode: 0644]
doc/reference/libtasn1-overrides.txt [new file with mode: 0644]
doc/reference/libtasn1-sections.txt [new file with mode: 0644]
doc/reference/libtasn1.pdf [new file with mode: 0644]
doc/reference/libtasn1.types [new file with mode: 0644]
doc/reference/tmpl/libtasn1-unused.sgml [new file with mode: 0644]
doc/reference/tmpl/libtasn1.sgml [new file with mode: 0644]
doc/stamp-vti [new file with mode: 0644]
doc/texi/ASN1.c.texi [new file with mode: 0644]
doc/texi/asn1_array2tree.texi [new file with mode: 0644]
doc/texi/asn1_bit_der.texi [new file with mode: 0644]
doc/texi/asn1_check_version.texi [new file with mode: 0644]
doc/texi/asn1_copy_node.texi [new file with mode: 0644]
doc/texi/asn1_create_element.texi [new file with mode: 0644]
doc/texi/asn1_delete_element.texi [new file with mode: 0644]
doc/texi/asn1_delete_structure.texi [new file with mode: 0644]
doc/texi/asn1_der_coding.texi [new file with mode: 0644]
doc/texi/asn1_der_decoding.texi [new file with mode: 0644]
doc/texi/asn1_der_decoding_element.texi [new file with mode: 0644]
doc/texi/asn1_der_decoding_startEnd.texi [new file with mode: 0644]
doc/texi/asn1_expand_any_defined_by.texi [new file with mode: 0644]
doc/texi/asn1_expand_octet_string.texi [new file with mode: 0644]
doc/texi/asn1_find_node.texi [new file with mode: 0644]
doc/texi/asn1_find_structure_from_oid.texi [new file with mode: 0644]
doc/texi/asn1_get_bit_der.texi [new file with mode: 0644]
doc/texi/asn1_get_length_ber.texi [new file with mode: 0644]
doc/texi/asn1_get_length_der.texi [new file with mode: 0644]
doc/texi/asn1_get_octet_der.texi [new file with mode: 0644]
doc/texi/asn1_get_tag_der.texi [new file with mode: 0644]
doc/texi/asn1_length_der.texi [new file with mode: 0644]
doc/texi/asn1_number_of_elements.texi [new file with mode: 0644]
doc/texi/asn1_octet_der.texi [new file with mode: 0644]
doc/texi/asn1_parser2array.texi [new file with mode: 0644]
doc/texi/asn1_parser2tree.texi [new file with mode: 0644]
doc/texi/asn1_perror.texi [new file with mode: 0644]
doc/texi/asn1_print_structure.texi [new file with mode: 0644]
doc/texi/asn1_read_tag.texi [new file with mode: 0644]
doc/texi/asn1_read_value.texi [new file with mode: 0644]
doc/texi/asn1_strerror.texi [new file with mode: 0644]
doc/texi/asn1_write_value.texi [new file with mode: 0644]
doc/texi/coding.c.texi [new file with mode: 0644]
doc/texi/decoding.c.texi [new file with mode: 0644]
doc/texi/element.c.texi [new file with mode: 0644]
doc/texi/errors.c.texi [new file with mode: 0644]
doc/texi/gstr.c.texi [new file with mode: 0644]
doc/texi/libtasn1_perror.texi [new file with mode: 0644]
doc/texi/libtasn1_strerror.texi [new file with mode: 0644]
doc/texi/parser_aux.c.texi [new file with mode: 0644]
doc/texi/structure.c.texi [new file with mode: 0644]
doc/texi/version.c.texi [new file with mode: 0644]
doc/texinfo.css [new file with mode: 0644]
doc/version.texi [new file with mode: 0644]
examples/CertificateExample.c [new file with mode: 0644]
examples/CrlExample.c [new file with mode: 0644]
examples/Makefile.am [new file with mode: 0644]
examples/Makefile.in [new file with mode: 0644]
examples/asn1Coding_test.asg [new file with mode: 0644]
examples/asn1Coding_test.asn [new file with mode: 0644]
examples/pkix.asn [new file with mode: 0644]
examples/pkix_asn1_tab.c [new file with mode: 0644]
gl/Makefile.am [new file with mode: 0644]
gl/Makefile.in [new file with mode: 0644]
gl/getopt.c [new file with mode: 0644]
gl/getopt.in.h [new file with mode: 0644]
gl/getopt1.c [new file with mode: 0644]
gl/getopt_int.h [new file with mode: 0644]
gl/gettext.h [new file with mode: 0644]
gl/m4/00gnulib.m4 [new file with mode: 0644]
gl/m4/autobuild.m4 [new file with mode: 0644]
gl/m4/extensions.m4 [new file with mode: 0644]
gl/m4/getopt.m4 [new file with mode: 0644]
gl/m4/gnulib-cache.m4 [new file with mode: 0644]
gl/m4/gnulib-common.m4 [new file with mode: 0644]
gl/m4/gnulib-comp.m4 [new file with mode: 0644]
gl/m4/include_next.m4 [new file with mode: 0644]
gl/m4/longlong.m4 [new file with mode: 0644]
gl/m4/malloc.m4 [new file with mode: 0644]
gl/m4/manywarnings.m4 [new file with mode: 0644]
gl/m4/multiarch.m4 [new file with mode: 0644]
gl/m4/read-file.m4 [new file with mode: 0644]
gl/m4/realloc.m4 [new file with mode: 0644]
gl/m4/stdarg.m4 [new file with mode: 0644]
gl/m4/stddef_h.m4 [new file with mode: 0644]
gl/m4/stdint.m4 [new file with mode: 0644]
gl/m4/stdlib_h.m4 [new file with mode: 0644]
gl/m4/unistd_h.m4 [new file with mode: 0644]
gl/m4/valgrind-tests.m4 [new file with mode: 0644]
gl/m4/version-etc.m4 [new file with mode: 0644]
gl/m4/warn-on-use.m4 [new file with mode: 0644]
gl/m4/warnings.m4 [new file with mode: 0644]
gl/m4/wchar_h.m4 [new file with mode: 0644]
gl/m4/wchar_t.m4 [new file with mode: 0644]
gl/m4/wint_t.m4 [new file with mode: 0644]
gl/progname.c [new file with mode: 0644]
gl/progname.h [new file with mode: 0644]
gl/read-file.c [new file with mode: 0644]
gl/read-file.h [new file with mode: 0644]
gl/realloc.c [new file with mode: 0644]
gl/stdarg.in.h [new file with mode: 0644]
gl/stddef.in.h [new file with mode: 0644]
gl/stdint.in.h [new file with mode: 0644]
gl/stdlib.in.h [new file with mode: 0644]
gl/unistd.in.h [new file with mode: 0644]
gl/version-etc-fsf.c [new file with mode: 0644]
gl/version-etc.c [new file with mode: 0644]
gl/version-etc.h [new file with mode: 0644]
gl/wchar.in.h [new file with mode: 0644]
gtk-doc.make [new file with mode: 0644]
lib/ASN1.c [new file with mode: 0644]
lib/ASN1.y [new file with mode: 0644]
lib/Makefile.am [new file with mode: 0644]
lib/Makefile.in [new file with mode: 0644]
lib/coding.c [new file with mode: 0644]
lib/decoding.c [new file with mode: 0644]
lib/element.c [new file with mode: 0644]
lib/element.h [new file with mode: 0644]
lib/errors.c [new file with mode: 0644]
lib/gllib/Makefile.am [new file with mode: 0644]
lib/gllib/Makefile.in [new file with mode: 0644]
lib/gllib/dummy.c [new file with mode: 0644]
lib/gllib/stddef.in.h [new file with mode: 0644]
lib/gllib/stdint.in.h [new file with mode: 0644]
lib/gllib/string.in.h [new file with mode: 0644]
lib/gllib/strverscmp.c [new file with mode: 0644]
lib/gllib/wchar.in.h [new file with mode: 0644]
lib/glm4/gnulib-comp.m4 [new file with mode: 0644]
lib/glm4/ld-version-script.m4 [new file with mode: 0644]
lib/glm4/string_h.m4 [new file with mode: 0644]
lib/glm4/strverscmp.m4 [new file with mode: 0644]
lib/glm4/visibility.m4 [new file with mode: 0644]
lib/gstr.c [new file with mode: 0644]
lib/gstr.h [new file with mode: 0644]
lib/int.h [new file with mode: 0644]
lib/libtasn1.h [new file with mode: 0644]
lib/libtasn1.map [new file with mode: 0644]
lib/libtasn1.pc.in [new file with mode: 0644]
lib/parser_aux.c [new file with mode: 0644]
lib/parser_aux.h [new file with mode: 0644]
lib/structure.c [new file with mode: 0644]
lib/structure.h [new file with mode: 0644]
lib/version.c [new file with mode: 0644]
m4/gtk-doc.m4 [new file with mode: 0644]
m4/libtool.m4 [new file with mode: 0644]
m4/ltoptions.m4 [new file with mode: 0644]
m4/ltsugar.m4 [new file with mode: 0644]
m4/ltversion.m4 [new file with mode: 0644]
m4/lt~obsolete.m4 [new file with mode: 0644]
m4/pkg.m4 [new file with mode: 0644]
m4/update-header-version.m4 [new file with mode: 0644]
maint.mk [new file with mode: 0644]
packaging/libtasn1-1.3-pkgconfig.patch [new file with mode: 0644]
packaging/libtasn1.changes [new file with mode: 0644]
packaging/libtasn1.spec [new file with mode: 0644]
src/Makefile.am [new file with mode: 0644]
src/Makefile.in [new file with mode: 0644]
src/asn1Coding.c [new file with mode: 0644]
src/asn1Decoding.c [new file with mode: 0644]
src/asn1Parser.c [new file with mode: 0644]
tests/Makefile.am [new file with mode: 0644]
tests/Makefile.in [new file with mode: 0644]
tests/TestIndef.p12 [new file with mode: 0644]
tests/Test_encoding.asn [new file with mode: 0644]
tests/Test_encoding.c [new file with mode: 0644]
tests/Test_errors.c [new file with mode: 0644]
tests/Test_indefinite.c [new file with mode: 0644]
tests/Test_parser.asn [new file with mode: 0644]
tests/Test_parser.c [new file with mode: 0644]
tests/Test_tree.asn [new file with mode: 0644]
tests/Test_tree.c [new file with mode: 0644]
tests/Test_tree_asn1_tab.c [new file with mode: 0644]
tests/crlf [new file with mode: 0755]
tests/crlf.cer [new file with mode: 0644]
tests/pkix.asn [new file with mode: 0644]
tests/threadsafety [new file with mode: 0755]
windows/asn1-parser/asn1-parser.vcproj [new file with mode: 0755]
windows/asn1-parser/config.h [new file with mode: 0755]
windows/gnulib/getopt.h [new file with mode: 0755]
windows/gnulib/gnulib.vcproj [new file with mode: 0755]
windows/libtasn1.ncb [new file with mode: 0755]
windows/libtasn1.sln [new file with mode: 0755]
windows/libtasn1.suo [new file with mode: 0755]
windows/libtasn1/libtasn1.vcproj [new file with mode: 0755]
windows/test-parser/test-parser.vcproj [new file with mode: 0755]
windows/test-tree/test-tree.vcproj [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..e817f0a
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,13 @@
+Original authors:
+Fabio Fiorina <fiorinaf@gnutls.org>
+Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+Current maintainer:
+Simon Josefsson <simon@josefsson.org>
+
+----------------------------------------------------------------------
+Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+              2009, 2010 Free Software Foundation, Inc.
+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.
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 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.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  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, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public 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.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/COPYING.LIB b/COPYING.LIB
new file mode 100644 (file)
index 0000000..8add30a
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public 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.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..4784eb7
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,3820 @@
+2010-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.7.
+
+2010-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk, doc/gendocs_template,
+       gl/override/doc/gendocs_template.diff: Build gtk-doc PDF by default
+       and publish it.
+
+2010-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am, gtk-doc.make, m4/gtk-doc.m4: Upgrade
+       GTK-DOC files to get PDF files.
+
+2010-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/c++defs.h, build-aux/gendocs.sh,
+       build-aux/vc-list-files, configure.ac, doc/gendocs_template,
+       gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/unistd_h.m4, gl/m4/valgrind-tests.m4,
+       gl/unistd.in.h, gl/wchar.in.h, lib/gllib/wchar.in.h,
+       lib/glm4/gnulib-common.m4, m4/valgrind.m4, maint.mk: Update gnulib
+       files, use valgrind-tests module.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * lib/glm4/visibility.m4: Update gnulib files.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Re-add doc for asn1_check_version after move to
+       separate file.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac, lib/libtasn1.h: Bump version.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * doc/announce.txt: Update for 2.6.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.6.
+
+2010-04-20  Simon Josefsson <simon@josefsson.org>
+
+       * gl/getopt.c, gl/getopt_int.h, maint.mk: Update gnulib files.
+
+2010-04-14  Simon Josefsson <simon@josefsson.org>
+
+       * doc/announce.txt: Fix links.
+
+2010-04-14  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gendocs_template, gl/getopt.c, gl/m4/getopt.m4: Update gnulib
+       files.
+
+2010-04-14  Simon Josefsson <simon@josefsson.org>
+
+       * gl/override/doc/gendocs_template.diff: Fix GTK-DOC API location.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * windows/libtasn1/libtasn1.vcproj: Add version.c.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * AUTHORS, NEWS, README, README-alpha, THANKS, doc/TODO,
+       examples/asn1Coding_test.asn, lib/element.h, lib/gstr.h,
+       lib/parser_aux.h, lib/structure.h, tests/Test_encoding.asn,
+       tests/Test_tree.asn, tests/pkix.asn: Add license notes to files.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_parser.asn: Reorder license header, for some reason the
+       Test_parser fails otherwise.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * THANKS: Add people, based on git log reading.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c, lib/libtasn1.h, src/asn1Coding.c,
+       src/asn1Decoding.c, src/asn1Parser.c, tests/Test_errors.c: Indent
+       code.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_trailing_blank: Add.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, cfg.mk, configure.ac, doc/libtasn1.texi,
+       doc/reference/libtasn1-docs.sgml, doc/texinfo.css,
+       examples/CertificateExample.c, examples/CrlExample.c,
+       examples/pkix.asn, lib/ASN1.y, lib/coding.c, lib/decoding.c,
+       lib/libtasn1.map, lib/parser_aux.c, src/Makefile.am,
+       tests/Test_tree.asn, tests/pkix.asn: Indent examples.  Fix
+       syntax-check warnings.
+
+2010-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_prohibit_empty_lines_at_EOF, GNUmakefile,
+       build-aux/c++defs.h, build-aux/warn-on-use.h, cfg.mk,
+       examples/pkix.asn, gl/Makefile.am, gl/m4/gnulib-common.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4,
+       gl/stdlib.in.h, gl/unistd.in.h, gl/wchar.in.h,
+       lib/gllib/Makefile.am, lib/gllib/string.in.h, lib/gllib/wchar.in.h,
+       lib/glm4/gnulib-common.m4, lib/glm4/gnulib-comp.m4,
+       lib/glm4/string_h.m4, maint.mk, tests/Test_parser.asn: Update gnulib
+       files, fix new syntax-check warnings, add license.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am, tests/threadsafety: Add threadsafety self
+       check.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * m4/valgrind.m4: Sync valgrind.m4.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Export libtasn1_* too, for backwards
+       compatibility functions.  Reported by ludo@gnu.org (Ludovic Courtès).
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * doc/cyclo/cyclo-libtasn1.html: Remove generated file.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Fix @acronym usage.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_texinfo_acronym: Add.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/warn-on-use.h, gl/Makefile.am, gl/getopt.c,
+       gl/gettext.h, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/stddef_h.m4, gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4,
+       gl/m4/wchar_h.m4, gl/stdint.in.h, gl/stdlib.in.h, gl/unistd.in.h,
+       lib/gllib/stdint.in.h, lib/glm4/gnulib-common.m4,
+       lib/glm4/gnulib-comp.m4, lib/glm4/stddef_h.m4,
+       lib/glm4/string_h.m4, lib/glm4/visibility.m4, lib/glm4/wchar_h.m4,
+       maint.mk: Update gnulib files.
+
+2010-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * THANKS, lib/Makefile.am: Link to gnulib library.  Reported by ludo@gnu.org (Ludovic Courtès).
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am, tests/Test_errors.c: tests/Test_errors: Add,
+       for more error checking.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Generated.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/gllib/Makefile.am, lib/gllib/string.in.h,
+       lib/gllib/strverscmp.c, lib/glm4/extensions.m4,
+       lib/glm4/gnulib-cache.m4, lib/glm4/gnulib-comp.m4,
+       lib/glm4/string_h.m4, lib/glm4/strverscmp.m4: Update gnulib files.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am, lib/parser_aux.c, lib/version.c: 
+       asn1_check_version: Simplify.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/parser_aux.c: Doc fixes.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Doc fixes.
+
+2010-03-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Doc fixes.
+
+2010-03-15  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac, lib/libtasn1.h: Bump versions.
+
+2010-03-15  Simon Josefsson <simon@josefsson.org>
+
+       * doc/announce.txt: Add.
+
+2010-03-15  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2010-03-15  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.5.
+
+2010-03-15  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh: Chmod.
+
+2010-03-15  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/c++defs.h, build-aux/vc-list-files,
+       build-aux/warn-on-use.h, gl/Makefile.am, gl/m4/gnulib-common.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4,
+       gl/m4/warn-on-use.m4, gl/m4/wchar.m4, gl/m4/wchar_h.m4,
+       gl/stdlib.in.h, gl/unistd.in.h, gl/wchar.in.h,
+       lib/gllib/Makefile.am, lib/gllib/wchar.in.h,
+       lib/glm4/gnulib-common.m4, lib/glm4/gnulib-comp.m4,
+       lib/glm4/warn-on-use.m4, lib/glm4/wchar.m4, lib/glm4/wchar_h.m4: 
+       Update gnulib files.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Add.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Generated.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: More GTK-DOC fixes.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * .gitignore, lib/ASN1.c: Generated.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: More GTK-DOC comment fixes.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c, lib/errors.c: More GTK-DOC comment fixes.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c, lib/ASN1.y, lib/coding.c, lib/decoding.c,
+       lib/element.c, lib/errors.c, lib/parser_aux.c, lib/structure.c: 
+       Improve GTK-DOC comments.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-02-17  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh, build-aux/link-warning.h, gl/Makefile.am,
+       gl/m4/gnulib-comp.m4, gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4,
+       gl/m4/wchar.m4, gl/stdlib.in.h, gl/unistd.in.h, gl/wchar.in.h,
+       lib/gllib/Makefile.am, lib/gllib/wchar.in.h,
+       lib/glm4/gnulib-comp.m4, lib/glm4/warn-on-use.m4,
+       lib/glm4/wchar.m4, maint.mk: Update gnulib files.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac, lib/libtasn1.h: Bump versions.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.4.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * m4/valgrind.m4: Make it work.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * README-alpha: Cleanup.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Bump copyright year.
+
+2010-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am: Update gnulib files.
+
+2010-01-12  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix syntax-check rules.
+
+2010-01-12  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_GPL_version: Add.
+
+2010-01-12  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_makefile_check, .x-sc_program_name,
+       .x-sc_prohibit_HAVE_MBRTOWC, .x-sc_prohibit_atoi_atof,
+       .x-sc_space_tab, .x-sc_useless_cpp_parens, build-aux/warn-on-use.h,
+       cfg.mk, doc/fdl-1.3.texi, doc/gendocs_template, gl/Makefile.am,
+       gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/unistd_h.m4,
+       gl/m4/warn-on-use.m4, gl/m4/warnings.m4, gl/unistd.in.h,
+       lib/glm4/gnulib-common.m4, maint.mk, src/asn1Coding.c,
+       src/asn1Parser.c: Update gnulib files.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Regenerate.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Merge Fabio and Nikos copyrights to the FSF, both have
+       signed papers.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi, examples/CertificateExample.c,
+       examples/CrlExample.c, lib/coding.c, lib/decoding.c, lib/element.c,
+       lib/errors.c, lib/gstr.c, lib/int.h, lib/libtasn1.h,
+       lib/parser_aux.c, lib/structure.c, src/asn1Coding.c,
+       src/asn1Decoding.c, src/asn1Parser.c, tests/Test_encoding.c,
+       tests/Test_indefinite.c, tests/Test_parser.c, tests/Test_tree.c: 
+       Merge Fabio and Nikos copyrights to the FSF, both have signed
+       papers.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * .clcopying, Makefile.am, cfg.mk, configure.ac, doc/Makefile.am,
+       doc/cyclo/Makefile.am, doc/fdl-1.3.texi, doc/gendocs_template,
+       doc/libtasn1.texi, examples/CertificateExample.c,
+       examples/CrlExample.c, examples/Makefile.am, gl/dummy.c,
+       lib/ASN1.c, lib/ASN1.y, lib/Makefile.am, lib/coding.c,
+       lib/decoding.c, lib/element.c, lib/errors.c, lib/gstr.c, lib/int.h,
+       lib/libtasn1.h, lib/libtasn1.map, lib/libtasn1.pc.in,
+       lib/parser_aux.c, lib/structure.c, m4/update-header-version.m4,
+       m4/valgrind.m4, src/Makefile.am, src/asn1Coding.c,
+       src/asn1Decoding.c, src/asn1Parser.c, tests/Makefile.am,
+       tests/Test_encoding.c, tests/Test_indefinite.c,
+       tests/Test_parser.c, tests/Test_tree.c, tests/crlf: Update copyright
+       notices.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/update-copyright, gl/Makefile.am,
+       gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Add gnulib
+       update-copyright module.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Fix ignore.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Ignore more.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2010-01-11  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, build-aux/arg-nonnull.h, build-aux/gendocs.sh,
+       build-aux/link-warning.h, build-aux/pmccabe2html,
+       build-aux/useless-if-before-free, build-aux/vc-list-files,
+       gl/Makefile.am, gl/getopt.c, gl/getopt.in.h, gl/getopt1.c,
+       gl/getopt_int.h, gl/gettext.h, gl/m4/00gnulib.m4,
+       gl/m4/autobuild.m4, gl/m4/extensions.m4, gl/m4/getopt.m4,
+       gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/include_next.m4,
+       gl/m4/longlong.m4, gl/m4/malloc.m4, gl/m4/manywarnings.m4,
+       gl/m4/multiarch.m4, gl/m4/pmccabe2html.m4, gl/m4/read-file.m4,
+       gl/m4/realloc.m4, gl/m4/stdarg.m4, gl/m4/stddef_h.m4,
+       gl/m4/stdint.m4, gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4,
+       gl/m4/version-etc.m4, gl/m4/warnings.m4, gl/m4/wchar.m4,
+       gl/m4/wchar_t.m4, gl/m4/wint_t.m4, gl/progname.c, gl/progname.h,
+       gl/read-file.c, gl/read-file.h, gl/realloc.c, gl/stdarg.in.h,
+       gl/stddef.in.h, gl/stdint.in.h, gl/stdlib.in.h, gl/unistd.in.h,
+       gl/version-etc-fsf.c, gl/version-etc.c, gl/version-etc.h,
+       gl/wchar.in.h, lib/gllib/Makefile.am, lib/gllib/dummy.c,
+       lib/gllib/stddef.in.h, lib/gllib/stdint.in.h, lib/gllib/wchar.in.h,
+       lib/glm4/00gnulib.m4, lib/glm4/gnulib-cache.m4,
+       lib/glm4/gnulib-common.m4, lib/glm4/gnulib-comp.m4,
+       lib/glm4/gnulib-tool.m4, lib/glm4/include_next.m4,
+       lib/glm4/ld-version-script.m4, lib/glm4/longlong.m4,
+       lib/glm4/multiarch.m4, lib/glm4/stddef_h.m4, lib/glm4/stdint.m4,
+       lib/glm4/visibility.m4, lib/glm4/wchar.m4, lib/glm4/wchar_t.m4,
+       lib/glm4/wint_t.m4, maint.mk: Update gnulib files.
+
+2010-01-03  Andreas Metzler <ametzler@downhill.at.eu.org>
+
+       * lib/decoding.c, lib/structure.c, tests/Test_indefinite.c,
+       tests/Test_tree.c: Typos: sructure, stucture. There is no function
+       named create_stucture, but one named asn1_create_element.  Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+2010-01-10  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * .gitignore: ignore more files
+
+2009-07-29  Simon Josefsson <simon@josefsson.org>
+
+       * README-alpha: Typo.
+
+2009-07-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac: Bump version.
+
+2009-07-29  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2009-07-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Mark v2.3 as stable.
+
+2009-07-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.3.
+
+2009-07-29  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/vc-list-files, gl/Makefile.am, gl/m4/unistd_h.m4,
+       gl/unistd.in.h, gl/version-etc.c, gl/version-etc.h, maint.mk: Update
+       gnulib files.
+
+2009-07-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS: documented last commit.
+
+2009-07-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/decoding.c: more careful decoding of OID.
+
+2009-06-23  Simon Josefsson <simon@josefsson.org>
+
+       * maint.mk: Update gnulib files.
+
+2009-06-23  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Doc fix.
+
+2009-06-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.c: Doc fix.
+
+2009-06-08  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: Improve
+       --help and --version outputs.
+
+2009-06-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, gl/m4/gnulib-comp.m4, gl/m4/version-etc.m4,
+       gl/version-etc.c: Update gnulib files.
+
+2009-06-02  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix typo.
+
+2009-06-02  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/manywarnings.m4: Update gnulib files.
+
+2009-05-30  Simon Josefsson <simon@josefsson.org>
+
+       * doc/cyclo/Makefile.am, doc/reference/libtasn1-docs.sgml,
+       lib/libtasn1.pc.in: Fix URLs.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Official GNU project.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Fix name.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/libtasn1.texi: Reflect GNU status.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * README: Rewrite.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * README-alpha: Add.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/Makefile.am, doc/gpl-3.0.texi, doc/lgpl-2.1.texi,
+       doc/libtasn1.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4: Drop (L)GPL from manual.
+
+2009-05-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/libtasn1.texi: Change info category.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Use NEWS that matches announce-gen regexps.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Configure maint.mk more.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * .prev-version: Fix.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * .prev-version: Add.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c, lib/libtasn1.h: Generated.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Replace TRUE/FALSE with ASN1_TRUE/ASN1_FALSE to work
+       around problem on Tru64.  Reported by Didier Godefroy
+       <dg@ulysium.net> in
+
+       <http://permalink.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/3581>.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * AUTHORS: Add.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac: Bump versions.
+
+2009-05-28  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/include_next.m4, lib/glm4/include_next.m4: Update gnulib
+       files.
+
+2009-05-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/ASN1.y: removed duplicate token.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix release target.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * m4/gtk-doc.m4, m4/pkg.m4: Upgrade gtk-doc scripts, fixes make
+       release.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.2.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/reference/Makefile.am, lib/libtasn1.h: Fix GTK-DOC.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/libtasn1-docs.sgml: Doc fix.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Revert.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk, examples/Makefile.am, lib/Makefile.am, src/Makefile.am: 
+       Fix warning flags.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac: Add --enable-gcc-warnings.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Ignore ASN1_API.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_makefile_check, .x-sc_useless_cpp_parens: Fix syntax-check
+       problems.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_program_name: Add.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * .x-sc_prohibit_HAVE_MBRTOWC, .x-sc_prohibit_atoi_atof,
+       .x-sc_space_tab, cfg.mk, doc/libtasn1.texi,
+       doc/reference/Makefile.am, gtk-doc.make, lib/parser_aux.c,
+       m4/valgrind.m4, src/asn1Coding.c, src/asn1Decoding.c,
+       src/asn1Parser.c, tests/pkix.asn: Fix syntax-check problems.
+
+2009-05-20  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/useless-if-before-free, build-aux/vc-list-files,
+       doc/gendocs_template, gl/Makefile.am, gl/getopt1.c, gl/gettext.h,
+       gl/m4/gnulib-comp.m4, gl/m4/multiarch.m4, gl/m4/wchar.m4,
+       gl/wchar.in.h, lib/gllib/Makefile.am, lib/gllib/wchar.in.h,
+       lib/glm4/gnulib-comp.m4, lib/glm4/multiarch.m4, lib/glm4/wchar.m4,
+       lib/libtasn1.h, maint.mk: Update gnulib files.
+
+2009-05-06  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/libtasn1.pc.in: Relicense libtasn1.pc to LGPLv2.1+
+
+2009-05-06  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Fix.
+
+2009-04-17  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac, lib/libtasn1.h: Bump version.
+
+2009-04-17  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2009-04-17  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.1.
+
+2009-04-16  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Sync upstream.
+
+2009-04-16  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Fix license info.
+
+2009-04-16  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac, lib/libtasn1.h: Bump versions.
+
+2009-04-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, THANKS: Add NEWS entry.
+
+2009-04-16  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh, doc/gendocs_template, doc/lgpl-2.1.texi,
+       lib/gllib/Makefile.am, lib/gllib/dummy.c, lib/glm4/gnulib-cache.m4,
+       lib/glm4/gnulib-comp.m4: Update gnulib files.  Fix compile failure
+       on Mac OS X.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Copy cyclo page.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 2.0.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Fix typo.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Only use warnings when using gcc.
+
+2009-04-13  Simon Josefsson <simon@josefsson.org>
+
+       * lib/gllib/Makefile.am, lib/glm4/gnulib-cache.m4,
+       lib/glm4/gnulib-comp.m4, lib/glm4/ld-version-script.m4, maint.mk: 
+       Update gnulib files.
+
+2009-03-23  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2009-03-23  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am, lib/int.h, lib/libtasn1.h, lib/libtasn1.map,
+       lib/parser_aux.c, lib/structure.c: Make it compile.
+
+2009-03-23  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, gl/unistd.in.h, maint.mk: Update gnulib files.
+
+2009-03-23  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.ac, lib/errors.c, lib/libtasn1.h: Re-add obsolete
+       stuff for compatibility.
+
+2009-03-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h, lib/libtasn1.h: Re-add old ASN1_TYPE struct fields for
+       compatibility.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/reference/Makefile.am, lib/Makefile.am,
+       lib/gllib/Makefile.am, lib/glm4/gnulib-cache.m4,
+       lib/glm4/gnulib-comp.m4, lib/glm4/visibility.m4, lib/libtasn1.h: Use
+       -fvisibility=hidden and mark public APIs explicitly.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am, doc/gdoc: Synx gdoc with libidn.  Use -pkg-name
+       to improve man pages.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * examples/CertificateExample.c, examples/CrlExample.c,
+       lib/coding.c, lib/decoding.c, lib/element.c, lib/element.h,
+       lib/gstr.h, lib/int.h, lib/libtasn1.h, lib/parser_aux.c,
+       lib/parser_aux.h, lib/structure.c, lib/structure.h,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Test_indefinite.c, tests/Test_parser.c, tests/Test_tree.c,
+       windows/asn1-parser/config.h, windows/gnulib/getopt.h: Indent code.
+       Reproduce using 'make indent' with GNU indent 2.2.10.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Add a INDENT_SOURCES to make 'make indent' work.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Remove dead code.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Generated.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y, lib/Makefile.am, lib/coding.c, lib/decoding.c,
+       lib/element.c, lib/errors.c, lib/errors.h, lib/parser_aux.c,
+       lib/structure.c: Simplify unused debug code.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Rename.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Can't use -Wunused-macros.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Cleanup.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * .gitignore: Update.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/cyclo/cyclo-libtasn1.html: Add.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.map: Use explicit list of symbols.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am, lib/libtasn1.map, lib/libtasn1.vers: Rename for
+       consistency.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac, lib/gllib/Makefile.am, lib/glm4/gnulib-cache.m4,
+       lib/glm4/gnulib-comp.m4, lib/glm4/ld-version-script.m4,
+       m4/linker-script.m4: Use linker script test from gnulib.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * THANKS: Merge from libtasn1-1.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Merge from libtasn1-1.
+
+2009-01-16  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk, doc/Makefile.am, doc/cyclo/Makefile.am,
+       doc/libtasn1.texi, examples/CertificateExample.c,
+       examples/CrlExample.c, examples/Makefile.am, lib/ASN1.y,
+       lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/errors.h, lib/gstr.c, lib/int.h, lib/libtasn1.h,
+       lib/parser_aux.c, lib/structure.c, src/Makefile.am,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Makefile.am, tests/Test_encoding.c, tests/Test_indefinite.c,
+       tests/Test_parser.c, tests/Test_tree.c, tests/crlf: Bump copyright
+       years.
+
+2009-01-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Add -I to get gnulib stdint.h.
+
+2009-03-04  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh, doc/gendocs_template, gl/Makefile.am,
+       gl/m4/00gnulib.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/longlong.m4,
+       gl/m4/malloc.m4, gl/m4/manywarnings.m4, gl/m4/multiarch.m4,
+       gl/m4/pmccabe2html.m4, gl/m4/realloc.m4, gl/m4/stdarg.m4,
+       gl/m4/stdint.m4, gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4,
+       gl/m4/wchar.m4, gl/m4/wint_t.m4, gl/progname.c, gl/stdint.in.h,
+       gl/stdlib.in.h, gl/unistd.in.h, gl/version-etc.c, gl/version-etc.h,
+       gl/wchar.in.h, lib/gllib/Makefile.am, lib/gllib/stdint.in.h,
+       lib/gllib/wchar.in.h, lib/glm4/00gnulib.m4,
+       lib/glm4/gnulib-common.m4, lib/glm4/gnulib-comp.m4,
+       lib/glm4/include_next.m4, lib/glm4/multiarch.m4,
+       lib/glm4/stdint.m4, maint.mk: Update gnulib files.
+
+2009-01-16  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Add gnulib stdint module from gnulib under lib/.
+
+2009-01-16  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, lib/Makefile.am, lib/gllib/Makefile.am,
+       lib/gllib/stdint.in.h, lib/gllib/wchar.in.h,
+       lib/glm4/gnulib-cache.m4, lib/glm4/gnulib-common.m4,
+       lib/glm4/gnulib-comp.m4, lib/glm4/gnulib-tool.m4,
+       lib/glm4/include_next.m4, lib/glm4/longlong.m4,
+       lib/glm4/multiarch.m4, lib/glm4/stdint.m4, lib/glm4/wchar.m4,
+       lib/glm4/wint_t.m4: Add gnulib stdint module from gnulib under lib/.
+
+2008-12-01  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/manywarnings.m4,
+       gl/m4/warnings.m4, gl/stdint.in.h, maint.mk: Update gnulib files.
+
+2008-12-01  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am, tests/crlf: Make crlf self-test work under
+       Mingw+Wine.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac: Rework warning initialization.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * gl/progname.h: Update gnulib files.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/gnulib-comp.m4, gl/m4/warnings.m4: Update gnulib files.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Update to sync with configure.ac rename.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * configure.ac, configure.in: Rename.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Fix warning parameters.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, examples/CertificateExample.c,
+       examples/CrlExample.c, gl/progname.h, lib/ASN1.c, lib/ASN1.y,
+       lib/element.c, lib/errors.c, lib/gstr.c, lib/int.h,
+       src/asn1Coding.c: Fix more warnings.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Generated.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, gl/m4/warnings.m4, lib/ASN1.c, lib/ASN1.y,
+       lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/int.h, lib/structure.c: Fix warnings.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/libtasn1-docs.sgml: Drop deprecated, we don't have
+       any deprecated symbols now.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.c: Doc fix.
+
+2008-11-17  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, cfg.mk, tests/Test_indefinite.c: Merge in v1.7 changes.
+
+2008-11-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.pc.in: Add URL field.  Add license.
+
+2008-11-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, m4/linker-script.m4, m4/update-header-version.m4,
+       m4/valgrind.m4: Split up operations into external M4 files.
+
+2008-11-12  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/gnulib-comp.m4, gl/m4/warnings.m4: Update gnulib files.
+
+2008-11-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Neatify.
+
+2008-11-11  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Add summary.
+
+2008-11-11  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/warnings.m4: Update gnulib files.
+
+2008-11-11  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk, configure.in: Move -Werror from configure to cfg.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Drop AC_C_CONST and debug notices.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/warnings.m4: Update gnulib files.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, configure.in, examples/Makefile.am, gl/Makefile.am,
+       gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Use gnulib warnings
+       module.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_indefinite.c: Make tests compile.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Fix compile error.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in, lib/int.h, lib/libtasn1.h, lib/libtasn1.vers,
+       lib/parser_aux.c, lib/structure.c: Reapply Nikos' optimization
+       patch.  Remove deprecated functions.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.6.
+
+2008-11-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/int.h, lib/libtasn1.h, lib/parser_aux.c,
+       lib/structure.c: Revert small_value patch temporarily.
+
+2008-11-07  Simon Josefsson <simon@josefsson.org>
+
+       * examples/CertificateExample.c, examples/CrlExample.c,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Test_encoding.c, tests/Test_indefinite.c,
+       tests/Test_parser.c, tests/Test_tree.c: Don't use now obsolete
+       functions.
+
+2008-11-07  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Test for -Wl,--version-script properly.
+
+2008-11-07  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Put headers before C++ block.  Improve comments.
+
+2008-11-07  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/pmccabe2html: Update gnulib files.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am, lib/errors.c, lib/libtasn1.h: Add
+       ASN1_DISABLE_DEPRECATED.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/libtasn1.h, lib/parser_aux.c: Fix LIBTASN1_VERSION
+       namespace violation.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Generated.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/reference/libtasn1-docs.sgml, lib/errors.c,
+       lib/libtasn1.h: Fix error function namespace.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Generated.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Use v1.6 for next release instead.
+
+2008-11-06  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Use static keyword.
+
+2008-11-05  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk, doc/Makefile.am, doc/texinfo.css: Add texinfo stylesheet.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/pmccabe.css, build-aux/pmccabe2html, configure.in,
+       doc/Makefile.am, doc/cyclo/Makefile.am, gl/Makefile.am,
+       gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/pmccabe2html.m4: 
+       Add cyclo reports.
+
+2008-11-05  Nikos Mavrogiannopoulos <nmav@crystal.(none)>
+
+       * : commit 581690dfc214d6e2e9ebdd9b1558b1f7a7c28c51 Author: Nikos
+       Mavrogiannopoulos <nmav@crystal.(none)> Date:   Wed Nov 5 00:30:40
+       2008 +0200
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/libtasn1.types: Remove.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.c, lib/structure.h: No need to publish
+       _asn1_copy_structure2.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, examples/CertificateExample.c, examples/CrlExample.c,
+       lib/ASN1.c, lib/ASN1.y, lib/coding.c, lib/decoding.c,
+       lib/element.c, lib/element.h, lib/int.h, lib/libtasn1.h,
+       lib/parser_aux.c, lib/parser_aux.h, lib/structure.c,
+       lib/structure.h: Move struct node_asn_struct to int.h.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Use new makefile rules.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove libtasn1-config.  Use warnings.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in, doc/README.autoconf, lib/Makefile.am,
+       lib/libtasn1-config.in, lib/libtasn1.m4, lib/libtasn1.pc.in: Remove
+       libtasn1-config and libtasn1.m4.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * .cvsusers: Remove.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * gtk-doc.make: Update from upstream.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * .gitignore: Fix.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/libtasn1.types: Add.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/tmpl/libtasn1-unused.sgml: Remove.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c, lib/libtasn1.h: Doc fix.  Fix asn1_get_length_ber
+       signature.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk, doc/Makefile.am, lib/decoding.c, lib/libtasn1.h: Build
+       fixes.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/libtasn1-docs.sgml: Add description.  Add list of
+       recently added symbols.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/gdoc: Sync gdoc with GnuTLS.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/Makefile.am, doc/fdl-1.3.texi, doc/fdl.texi,
+       doc/libtasn1.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, maint.mk: Update gnulib
+       files.  Use GFDLv1.3 for manual.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Bump version.  Fix NEWS.
+
+2008-11-04  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Reorder small_value member to avoid ABI breakage.
+       Fix namespace.
+
+2008-11-03  Nikos Mavrogiannopoulos <nmav@crystal.(none)>
+
+       * NEWS: moved entries to correct version.
+
+2008-11-03  Nikos Mavrogiannopoulos <nmav@crystal.(none)>
+
+       * NEWS, lib/decoding.c, lib/element.c, lib/libtasn1.h,
+       lib/parser_aux.c, lib/parser_aux.h, tests/Makefile.am,
+       tests/Test_indefinite.c, tests/pkix.asn: * Optimized tree generation by adding a small_value field in every
+         node.  If the node contains few data they will be stored there
+         instead of a malloced buffer.  * Added ability to DER decoder to decode BER encoded octet strings.  * Added test case with a pkcs-12 formatted structure to test the
+         ability to parse those strings.  * Added asn1_append_value() and asn1_set_value_octet() to reduce
+       code being copied.
+
+2008-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, gl/Makefile.am, gl/m4/gnulib-common.m4,
+       gl/m4/stdlib_h.m4, gl/m4/unistd_h.m4, gl/stdarg.in.h,
+       gl/stdint.in.h, gl/stdlib.in.h, gl/unistd.in.h, gl/wchar.in.h,
+       maint.mk: Update gnulib files.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi, examples/CertificateExample.c,
+       examples/CrlExample.c, lib/ASN1.c, lib/ASN1.y, lib/coding.c,
+       lib/decoding.c, lib/gstr.h, lib/parser_aux.c, lib/structure.c,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Test_encoding.c, tests/Test_parser.c, tests/Test_tree.c: 
+       Update usages of MAX_* constants.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/libtasn1.h: Fix namespace violation.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, configure.in, doc/reference/Makefile.am,
+       examples/Makefile.am, lib/Makefile.am, src/Makefile.am,
+       src/asn1Decoding.c, tests/Makefile.am: Add warning flags mechanism.
+       Fix warnings.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, gl/Makefile.am, gl/m4/extensions.m4, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/strdup.m4, gl/m4/string_h.m4,
+       gl/strdup.c, gl/string.in.h: Assume strdup and string.h.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Avoid warnings in modern libtool.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * .cvsignore, doc/.cvsignore, doc/reference/.cvsignore,
+       doc/reference/tmpl/.cvsignore, lib/.cvsignore, src/.cvsignore,
+       tests/.cvsignore: Remove.
+
+2008-10-08  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/strdup.m4, gl/m4/string_h.m4, gl/m4/unistd_h.m4,
+       gl/m4/wchar.m4, gl/m4/wint_t.m4, gl/malloc.c, gl/string.in.h,
+       gl/unistd.in.h, gl/wchar.in.h: Update gnulib files.
+
+2008-09-08  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/include_next.m4, gl/stdarg.in.h,
+       gl/stdint.in.h, gl/stdlib.in.h, gl/string.in.h, gl/unistd.in.h,
+       gl/wchar.in.h: Update gnulib files.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in, lib/libtasn1.h: Bump versions.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix gnupload.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Generated.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Typo.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.5.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * cfg.mk: Fix release target.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * .clcopying, Makefile.am, cfg.mk: Fix release target.
+
+2008-08-29  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, maint.mk: Update gnulib files.
+
+2008-08-26  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Autobuild is invoked from gnulib now.
+
+2008-08-25  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, THANKS: Add credits.
+
+2008-08-25  Simon Josefsson <simon@josefsson.org>
+
+       * lib/element.c: Fix memory leaks, tiny patch from Christian
+       Grothoff <christian@grothoff.org>.
+
+2008-08-21  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/string_h.m4, gl/string.in.h,
+       m4/autobuild.m4: Update gnulib files.
+
+2008-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, doc/gendocs_template, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4,
+       maint.mk: Update gnulib files.
+
+2008-05-07  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-05-07  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh, gl/Makefile.am, gl/m4/stdlib_h.m4,
+       gl/m4/string_h.m4, gl/stdlib.in.h, gl/string.in.h: Update gnulib
+       files.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Regenerate.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Bump versions.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.4.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * windows/libtasn1/libtasn1.vcproj: Drop mem.h.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Drop mem.h.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * gl/m4/extensions.m4, gl/m4/getopt.m4, gl/m4/stdint.m4: Update
+       gnulib files.
+
+2008-04-21  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in, examples/CertificateExample.c,
+       examples/CrlExample.c, lib/ASN1.y, lib/Makefile.am, lib/coding.c,
+       lib/decoding.c, lib/element.c, lib/int.h, lib/mem.h: Replace use of
+       alloca with malloc.
+
+2008-04-17  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, gl/Makefile.am, gl/m4/gnulib-common.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/stdint.m4,
+       gl/m4/stdlib_h.m4, gl/stdarg.in.h, gl/stdlib.in.h, gl/wchar.in.h: 
+       Update gnulib files.
+
+2008-03-25  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, build-aux/GNUmakefile, build-aux/gendocs.sh,
+       build-aux/maint.mk, cfg.mk, gl/Makefile.am, gl/getopt.c,
+       gl/m4/absolute-header.m4, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/stdarg.m4,
+       maint-cfg.mk, maint.mk: Update gnulib files.
+
+2008-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Bump versions.
+
+2008-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/unistd_h.m4, gl/unistd.in.h: Update.
+
+2008-02-06  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Avoid brace expansion.
+
+2008-02-03  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2008-02-03  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2008-02-03  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Typo.
+
+2008-02-03  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Fix cut'n'paste typo.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.3.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_encoding.c: Fix mem leak.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/memmove.m4, gl/memmove.c: Update gnulib files.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, lib/int.h: Don't bother with strings.h.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * AUTHORS, THANKS: Fix my e-mail address.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Bump copyright years.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * THANKS: Add Michele.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.c: (_asn1_create_static_structure): Write NULL instead of 0.  Indent
+       output.  Reported by Michele Baldessari <michele@pupazzo.org>.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * examples/CertificateExample.c, examples/CrlExample.c: Added some
+       static initializers.  Tiny patch from Michele Baldessari
+       <michele@pupazzo.org>.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am, tests/crlf, tests/pkix.asn: Don't duplicate
+       pkix.asn.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * examples/CertificateExample.c, examples/CrlExample.c,
+       examples/Makefile.am: Fix building of examples.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * examples/Makefile.am: Add, based on src/Makefile.am.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, configure.in, examples/CertificateExample.c,
+       examples/CrlExample.c, examples/asn1Coding_test.asg,
+       examples/asn1Coding_test.asn, examples/pkix.asn,
+       src/CertificateExample.c, src/CrlExample.c, src/Makefile.am,
+       src/asn1Coding_test.asg, src/asn1Coding_test.asn, src/pkix.asn: Move
+       examples from src/ to new directory examples/.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Generated from ASN1.y.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * src/Makefile.am: Fix dependencies.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * src/Makefile.am, src/pkix_asn1_tab.c: Build pkix_asn1_tab.c using
+       asn1Parser.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Handle 'INTEGER { ...} (a..b)', as used by
+       src/pkix.asn1.  Reverts part of Fabio's patch on Sep 18 2003.
+
+2008-02-01  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/unistd_h.m4, gl/unistd.in.h: Update gnulib
+       files.
+
+2008-01-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am, lib/Makefile.am, lib/defines.h,
+       lib/int.h: Merge defines.h into int.h.
+
+2008-01-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/longlong.m4, gl/m4/stdint.m4,
+       gl/m4/wchar.m4, gl/stdint.in.h, gl/wchar.in.h, lib/defines.h: Use
+       gnulib stdint module.
+
+2008-01-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Drop unnecessary gcc -pipe check.
+
+2008-01-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2008-01-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2008-01-31  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh, gl/Makefile.am, gl/m4/gnulib-comp.m4,
+       gl/m4/stdlib_h.m4, gl/m4/string_h.m4, gl/m4/unistd_h.m4,
+       gl/progname.c, gl/stdlib.in.h, gl/string.in.h, gl/unistd.in.h,
+       gl/version-etc.c: Update gnulib files.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Reorder release targets.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix release target.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.2.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump versions.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Bump versions.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/gendocs.sh, build-aux/maint.mk, doc/fdl.texi,
+       doc/gendocs_template, doc/gpl-3.0.texi, gl/Makefile.am,
+       gl/getopt.c, gl/getopt1.c, gl/getopt_int.h, gl/gettext.h,
+       gl/m4/absolute-header.m4, gl/m4/extensions.m4,
+       gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/string_h.m4,
+       gl/m4/unistd_h.m4, gl/progname.c, gl/progname.h, gl/read-file.c,
+       gl/read-file.h, gl/strdup.c, gl/version-etc-fsf.c,
+       gl/version-etc.c, gl/version-etc.h: Update gnulib.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * gl/.cvsignore, gl/getopt_.h, gl/string_.h, gl/unistd_.h: Update
+       gnulib.
+
+2007-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * gl/getopt.in.h, gl/m4/malloc.m4, gl/m4/realloc.m4,
+       gl/m4/stdlib_h.m4, gl/malloc.c, gl/realloc.c, gl/stdlib.in.h,
+       gl/string.in.h, gl/unistd.in.h: Add.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.1.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump versions.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Bump copyright years.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/parser_aux.c: Fix asn1_check_version to accept that (e.g.) 1.0
+       is more recent than 0.3.10.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 1.0.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix release target.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Dist (l)gpl.texi.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Fixes.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Typo.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Use GPLv3 for self tests, tools, build
+       infrastructure.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, configure.in, lib/Makefile.am, maint-cfg.mk: Use
+       GPLv3 for self tests, tools, build infrastructure.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * COPYING, src/CertificateExample.c, src/CrlExample.c,
+       src/Makefile.am, src/asn1Coding.c, src/asn1Decoding.c,
+       src/asn1Parser.c, tests/Makefile.am, tests/Test_encoding.c,
+       tests/Test_parser.c, tests/Test_tree.c, tests/crlf: Use GPLv3 for
+       self tests, tools, build infrastructure.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Fix.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/fdl.texi, doc/gpl-3.0.texi, doc/lgpl-2.1.texi,
+       gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/include_next.m4: Update gnulib files.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Fixes for license.  Add Introduction section.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/GNUmakefile, build-aux/gendocs.sh, build-aux/maint.mk,
+       doc/gendocs_template, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/string_h.m4, gl/m4/unistd_h.m4,
+       gl/string_.h, gl/unistd_.h, gl/version-etc.c: Update gnulib files.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2007-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Drop gnits mode.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * ChangeLog: Generated.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * lib/libtasn1.h: Generated.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * NEWS: Version 0.3.10.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * NEWS: Add.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * doc/gendocs_template, gl/override/doc/gendocs_template.diff: Use a
+       diff.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * gl/override/doc/gendocs_template: Remove.
+
+2007-05-25  Simon Josefsson <jas@mocca.josefsson.org>
+
+       * build-aux/gendocs.sh, doc/gendocs_template, gl/Makefile.am,
+       gl/getopt_.h, gl/m4/gnulib-comp.m4, gl/m4/unistd_h.m4,
+       gl/string_.h, gl/unistd_.h, gl/version-etc.c: Update.
+
+2007-03-09  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Use modern constructs.
+
+2007-03-09  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Bump versions.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix release.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix release.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Typo.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.9.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2007-03-02  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Git fixes of release target.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Generated.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * .gitignore: Fix.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * .gitignore: Add.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile: Fix.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile: Use GNUmakefile from build-aux/.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Reorder.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile: Rewrite, gnulib's real GNUmakefile is in build-aux.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/string_h.m4, gl/m4/unistd_h.m4, gl/string_.h, gl/unistd_.h: 
+       Update.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Put gnulib stuff in build-aux/.
+
+2007-03-01  Simon Josefsson <simon@josefsson.org>
+
+       * build-aux/GNUmakefile, build-aux/gendocs.sh,
+       build-aux/link-warning.h, build-aux/maint.mk, gendocs.sh, maint.mk: 
+       Update.
+
+2007-02-27  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Mention cvs->git.
+
+2007-02-13  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/strdup.m4, gl/m4/unistd_h.m4,
+       gl/strdup.c, gl/version-etc.c: Update.
+
+2007-02-13  Simon Josefsson <simon@josefsson.org>
+
+       * gl/strdup.h: Remove.
+
+2007-02-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2007-02-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, gl/m4/absolute-header.m4, gl/m4/extensions.m4,
+       gl/m4/gnulib-common.m4, gl/m4/string_h.m4, gl/string_.h,
+       gl/unistd_.h: Add.
+
+2007-02-13  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.c: Pull in config.h in generated code.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix make release.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.8.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Revert, problems was double EXTRA_DIST.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Add -I's.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-comp.m4: Update.
+
+2006-11-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, gl/Makefile.am, gl/getopt_.h, gl/gettext.h,
+       gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/read-file.m4,
+       gl/progname.h, gl/read-file.c, gl/read-file.h, src/asn1Decoding.c,
+       tests/Makefile.am, tests/crlf, tests/pkix.asn: Use read_binary_file
+       to read data, for Windows.  Add self-test to test regressions.
+
+2006-10-30  Simon Josefsson <simon@josefsson.org>
+
+       * doc/TODO: Add.
+
+2006-10-30  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c: Fix last commit.
+
+2006-10-30  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c: Handle arbitrary large DER output lenghts.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.7.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Fix GTK-DOC warning.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: No need to test for getopt.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Fix copyright.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: Improve
+       --help output.  Assume getopt_long, since gnulib provides it.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: Remove
+       unused version variable.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * gl/.cvsignore: [no log message]
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, configure.in, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/stdarg.m4, gl/progname.c,
+       gl/progname.h, gl/version-etc-fsf.c, gl/version-etc.c,
+       gl/version-etc.h, lib/libtasn1.h, src/Makefile.am,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: Use progname
+       and version-etc-fsf modules.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4: Update.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/dummy.c, gl/getopt.c, gl/getopt1.c,
+       gl/getopt_.h, gl/getopt_int.h, gl/gettext.h, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/onceonly_2_57.m4, gl/m4/strdup.m4,
+       gl/memmove.c, gl/override/doc/gendocs_template, gl/strdup.c,
+       gl/strdup.h: Update gnulib files, don't require LGPL modules (the
+       libtasn1 library doesn't use gnulib).
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-10-19  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Fix -Wno-pointer-sign test to respect user-defined
+       CFLAGS.  Reported by "Diego 'Flameeyes' Pettenò"
+       <flameeyes@gentoo.org>.
+
+2006-09-19  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-09-19  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-09-19  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c: (asn1_der_coding): For TYPE_NULL, increment counter even if we don't
+       write any output.  Reported by Stephen Wrobleski
+       <steve@localtoast.org>.
+
+2006-08-13  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-08-13  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.6.
+
+2006-08-13  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gendocs_template, gendocs.sh, gl/Makefile.am, gl/gettext.h,
+       gl/m4/gnulib-comp.m4, gl/m4/onceonly_2_57.m4: Update.
+
+2006-07-13  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Fix -I's.
+
+2006-07-13  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Change gendocs place.
+
+2006-07-13  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gendocs.sh, gendocs.sh, gl/Makefile.am, gl/getopt.c,
+       gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/onceonly_2_57.m4: Update.
+
+2006-07-13  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: 
+       Update.
+
+2006-07-13  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Fix valgrind test.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gdoc: Use GNU-style warnings.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gdoc: Fix texinfo output, from gnutls.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * src/Makefile.am: Need -Igl, for unistd.h.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gdoc: Sync with Shishi, fixes man page bug in debian.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Only optionally use valgrind.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in, lib/libtasn1.h: Bump version.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Test for valgrind.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.5.
+
+2006-06-27  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, tests/Makefile.am: Fix distcheck.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1-config.in: Support --la-file and --help with proper
+       exit code.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Remove igloo upload, it's broken.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Fix srcdir!=objdir.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump version.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.pc.in: Add Libs.private.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: 
+       Update.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Fix -Wno-pointer-sign test.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_tree.asn, tests/Test_tree.c: Trigger a bug that made
+       Shishi self tests fail on 64-bit platforms.
+
+2006-06-26  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c: (asn1_octet_der): Work even if str_len is 0, i.e., write an ASN.1
+       length of zero.  Otherwise encodings became garbled on 64-bit
+       platforms, detected while running the Shishi self-tests on the
+       Debian build robots.  A self test to reproduce this is in Test_tree.
+
+2006-06-22  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Make portable to mingw.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.4.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Fix typo.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Fix.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Use --tool, needed on some platforms.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Check for pointer-sign before using it.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/.cvsignore: [no log message]
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Add Test_encoding.  Simplify.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_encoding.c: Remove unused.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, tests/Test_encoding.asn: Add.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_encoding.c: Add, from Nikos.  I fixed treefile and
+       library version checking, and indentation.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Add -no-install.
+
+2006-05-10  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am: Run tests under valgrind, if available.
+
+2006-05-09  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-05-09  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-05-09  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/errors.c, lib/parser_aux.c, lib/structure.c: some fixes.
+       node_asn now has value_len set to zero on initialization.
+
+2006-05-07  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-05-07  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.3.3.
+
+2006-05-07  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add dates for releases.
+
+2006-05-07  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am: Update.
+
+2006-05-05  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS, lib/structure.c: corrected bug in copy_structure3(). This
+       caused bad encodings.
+
+2006-04-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/gstr.c, lib/parser_aux.c, lib/structure.c: changed the coding
+       style to -i2, so the source code is readable again.
+
+2006-04-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/libtasn1.h: class conflicts with c++
+
+2006-04-26  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Update.
+
+2006-04-26  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-04-26  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-03-30  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h, lib/structure.c: Fix warnings and C++ use, from
+       Nikos.
+
+2006-03-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * configure.in: added -Wno-pointer-sign to gcc to avoid tons of
+       useless warnings.
+
+2006-03-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/decoding.c, lib/parser_aux.c, lib/parser_aux.h: Removed some
+       of signedness warnings. Still many to go.
+
+2006-03-21  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Add header.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * doc/.cvsignore: [no log message]
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: Fix
+       help2man formatting.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Fix info name.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Build man pages.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Look for help2man.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * src/Makefile.am: Fix typo.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-03-12  Simon Josefsson <simon@josefsson.org>
+
+       * src/Makefile.am: Install asn1Parser, asn1Coding, asn1Decoding
+       (asn1Parser needed by Shishi).
+
+2006-03-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/structure.c: [no log message]
+
+2006-03-11  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Update.
+
+2006-03-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * configure.in, doc/Makefile.am, lib/libtasn1.h, lib/structure.c: 
+       [no log message]
+
+2006-03-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/coding.c: some improvements in coding
+
+2006-03-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/coding.c: some improvements in coding
+
+2006-03-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS, lib/coding.c: Corrected bug which caused an overwrite of an
+       element during DER encoding.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Update.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Fixes for GTK-DOC.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c: Fix prototype (for GTK-DOC).
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1-dont.h: Remove.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Add asn1_copy_node.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.c: Add, from GnuTLS.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/parser_aux.c: Typo.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/element.c, lib/parser_aux.c,
+       lib/structure.c: Revert, don't export asn1_find_up.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/Makefile.am, lib/int.h, lib/parser_aux.h: Revert.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Add back libtasn1-dont.h stuff.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Move new APIs to libtasn1-dont.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Include libtasn1-dont.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, doc/reference/tmpl/.cvsignore, lib/Makefile.am: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Add libtasn1-dont.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1-dont.h: New file, mostly with the new "bad" APIs from
+       libtasn1.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c: Fix.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Map back type_field().
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Add ASN1_TYPE_FIELD.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Map back TYPE_* and CLASS_*.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Export ASN1_CONST_*, taken from int.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Map short TYPE_* keywords.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Export ASN1_TYPE_*, taken from int.h.  GnuTLS
+       needs this.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Update.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h, lib/parser_aux.c: Fix prototypes.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/element.c, lib/libtasn1.h,
+       lib/parser_aux.c, lib/parser_aux.h, lib/structure.c: Export
+       asn1_find_node and asn1_find_up.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Update version number in lib/libtasn1.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: Fix
+       unistd.h.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove unistd.h, fixed by gnulib.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, THANKS: Add.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/getopt.c, gl/m4/gnulib-comp.m4,
+       gl/m4/unistd_h.m4, lib/ASN1.c, maint.mk: Update.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_parser.asn: Add BIT STRING SIZE test.
+
+2006-03-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Support 'BIT STRING (SIZE(42))' constructs, suggested
+       by Cyril Holweck <cyril.holweck@q-free.com>.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Dist windows/ stuff.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Don't dist windows/ stuff.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * maint-cfg.mk: Fix.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * gtk-doc.make, m4/gtk-doc.m4: Add.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/.cvsignore, lib/windows/config.h,
+       lib/windows/libtasn1.sln, lib/windows/libtasn1.vcproj,
+       windows/asn1-parser/asn1-parser.vcproj,
+       windows/asn1-parser/config.h, windows/gnulib/getopt.h,
+       windows/gnulib/gnulib.vcproj, windows/libtasn1.sln,
+       windows/libtasn1/libtasn1.vcproj,
+       windows/test-parser/test-parser.vcproj,
+       windows/test-tree/test-tree.vcproj: Move MSVS project files to
+       top-level directory, and add self-tests and src/ tools.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/getopt.c, gl/m4/gnulib-cache.m4: Update.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Parser.c: Fix.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/getopt.c, gl/getopt1.c, gl/getopt_.h,
+       gl/getopt_int.h, gl/gettext.h, gl/m4/getopt.m4,
+       gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Add getopt, for src/
+       tools in MSVS.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/libtasn1.vcproj: Update.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Add, mostly for MSVS builds.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Test_tree_asn1_tab.c: Update.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.h: Remove duplicate definitions.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.h: Remove duplicate prototypes.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Remove redundant definitions.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/Makefile.am: Fix HIGNORE's.
+
+2006-02-28  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/int.h, lib/libtasn1.h: Make
+       ASN1_CLASS_* official.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4,
+       gl/m4/strdup.m4, gl/strdup.c, gl/strdup.h: Add strdup.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/libtasn1.vcproj: Update.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Update.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove unneeded stuff.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/config.h: Remove unneeded def.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * buildconf: Remove, just use 'make' instead.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * GNUmakefile, gl/Makefile.am, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, maint-cfg.mk, maint.mk: Add
+       maintainer-makefile stuff.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am, lib/coding.c, lib/decoding.c, lib/der.h,
+       lib/element.c, lib/parser_aux.c, lib/structure.c: Remove der.h.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Move from der.h.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/der.h: Remove redundant code.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/defines.h: Assume C89.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c: Doc fix for asn1_bit_der.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c: Doc fix for asn1_length_der and asn1_octet_der.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Doc fix for asn1_get_length_der.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Doc fix for asn1_get_bit_der.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Doc fix for asn1_get_octet_der.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Distribute MSVS files.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/.cvsignore, lib/windows/libtasn1.vcproj: Fix release
+       target.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/libtasn1.vcproj: Add config.h to project.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/windows/config.h, lib/windows/libtasn1.sln,
+       lib/windows/libtasn1.vcproj: Add MSVS files.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Typo.
+
+2006-02-23  Simon Josefsson <simon@josefsson.org>
+
+       * src/asn1Parser.c: Convert to Unix EOLs.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/defines.h: Remove unused.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Remove errors_int.h.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.h, lib/errors_int.h: Remove unused.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Remove unused.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/gstr.c, lib/gstr.h: Remove unused code.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Bump version.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.vers: Bump ABI version to 0.3.  Don't export _asn1*.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/der.h, lib/element.c,
+       lib/libtasn1.h, lib/parser_aux.c, lib/structure.c: Export DER
+       utility functions.
+
+2006-02-11  Simon Josefsson <simon@josefsson.org>
+
+       * lib/der.h: Add copyright.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi, lib/errors_int.h: Fix.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/gstr.c, lib/libtasn1.h, lib/parser_aux.c, src/asn1Parser.c: Fix
+       typos.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Fix.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Reorder slightly.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, gl/Makefile.am, gl/dummy.c, gl/m4/gnulib-cache.m4,
+       gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/gnulib.m4,
+       gl/memmove.c: Update gnulib.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gdoc, tests/Test_parser.c, tests/Test_tree.c: Fix copyright.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am, lib/defines.h, lib/errors.h, lib/int.h,
+       lib/structure.c: Fix copying conditions.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, lib/ASN1.y, lib/defines.h, lib/errors.c, lib/gstr.c,
+       lib/parser_aux.c, src/CertificateExample.c, src/CrlExample.c,
+       src/Makefile.am, src/asn1Coding.c, src/asn1Decoding.c,
+       src/asn1Parser.c: Fix copyright.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, THANKS: Add.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Fix.
+
+2006-02-09  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c: Further length fixes.
+
+2006-02-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/element.c, lib/structure.c: 
+       Update _asn1_get_length_der fix.
+
+2006-02-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2006-02-08  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2006-02-08  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/der.h, lib/element.c,
+       lib/libtasn1.h, lib/parser_aux.c, lib/structure.c: Add libtasn1
+       fixes from Nikos, prompted by report from "Evgeny Legerov"
+       <admin@gleg.net>.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Fix.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * tests/Makefile.am, tests/Test_parser.c, tests/Test_tree.c: Fix
+       make check for objdir != srcdir, reported by Bernard Leak
+       <bernard@brenda-arkle.demon.co.uk>.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Fix objdir != srcdir.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Fix objdir != srcdir.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/tmpl/.cvsignore: [no log message]
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/tmpl/libtasn1-unused.sgml: Add, to workaround
+       gtk-dock bug.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, THANKS: Add.
+
+2006-01-27  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/errors.c: Add const, tiny patch from "ZIGLIO,
+       Frediano, VF-IT" <Frediano.Ziglio@vodafone.com>.
+
+2006-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2006-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, THANKS: Add.
+
+2006-01-18  Simon Josefsson <simon@josefsson.org>
+
+       * src/Makefile.am: Fix -I, reported by Bernard Leak
+       <bernard@brenda-arkle.demon.co.uk>.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Version 0.2.17.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, lib/libtasn1.h: Bump versions.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Dist libtasn1.vers.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Fix typo.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Add license.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, lib/libtasn1.vers: Add.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Replace --export-symbols-regex with version
+       script.
+
+2005-08-31  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Add --enable-ld-version-script.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * AUTHORS: Fix.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, configure.in, m4/autobuild.m4: Support autobuild.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/m4/gnulib.m4: Update.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * gl/getopt.c, gl/getopt1.c, gl/getopt_.h, gl/getopt_int.h,
+       gl/gettext.h, gl/m4/getopt.m4: Remove.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Don't use getopt from gnulib after all.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c: 
+       Revert.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/defines.h: Fix error.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/defines.h: Fix error.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Look for *.m4 in gl/m4/.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Revert (stdint was GPL..).
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Use stdint module.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * gl/Makefile.am, gl/getopt.c, gl/getopt1.c, gl/getopt_.h,
+       gl/getopt_int.h, gl/gettext.h, gl/m4/getopt.m4, gl/m4/gnulib.m4: Add
+       getopt.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, src/asn1Coding.c, src/asn1Decoding.c,
+       src/asn1Parser.c: Use getopt gnulib module.  Always use getopt_long.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove inline check (unused).
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove unused function checks.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, gl/Makefile.am, gl/m4/gnulib.m4, gl/m4/memmove.m4,
+       gl/m4/onceonly_2_57.m4, gl/memmove.c, lib/defines.h: Use gnulib to
+       replace memmove.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove C99 check (not needed).
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.c: Don't use C99 macros.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.h: Simplify.
+
+2005-08-12  Simon Josefsson <simon@josefsson.org>
+
+       * lib/errors.h: Remove unused _libtasn1_assert defines.  Don't use
+       C99 macros.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS, configure.in: Bump versions.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add (belatedly).
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix release target.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * acinclude.m4: Removed (not needed).
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/.cvsignore: [no log message]
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Bump version.  Fix license.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump version.  Add license.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/.cvsignore: [no log message]
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Remove (built from ASN1.y anyway).
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * COPYING, COPYING.LIB, doc/fdl.texi, doc/gendocs.sh,
+       doc/gendocs_template, src/CertificateExample.c, src/CrlExample.c,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Test_parser.c, tests/Test_tree.c: Fix address in license.
+
+2005-07-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y, lib/coding.c, lib/decoding.c, lib/defines.h,
+       lib/element.c, lib/errors.c, lib/errors.h, lib/gstr.c, lib/int.h,
+       lib/libtasn1.h, lib/parser_aux.c, lib/structure.c: Fix license.
+
+2005-04-21  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * configure.in: added the -D_REENTRANT and -D_THREAD_SAFE to CFLAGS.
+
+2005-02-16  Simon Josefsson <simon@josefsson.org>
+
+       * lib/defines.h: Protect config.h #include.
+
+2005-01-22  Simon Josefsson <simon@josefsson.org>
+
+       * THANKS: Add.
+
+2005-01-21  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, lib/Makefile.am, lib/libtasn1.pc.in: Add pkg-config
+       file.  Convert to use of $GCC to test if GCC is available.  Redirect
+       STDERR to /dev/null when determining if GNU as available, to avoid
+       useless error message if not.  Remove extra commas after check for
+       bzero memset memmove bcopy.  Convert to AC_MSG_NOTICE rather than
+       AC_MSG_RESULT for status messages.  Tiny change from Albert Chin
+       <gnutls-dev@mlists.thewrittenword.com>.
+
+2004-12-15  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2004-12-15  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: (release): Fix.
+
+2004-12-15  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Bump versions.
+
+2004-12-15  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Fix version (perhaps use libtasn1.h.in to avoid
+       this in the future?).
+
+2004-12-15  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/reference/libtasn1-docs.sgml: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: (release): Copy GTK-DOC manual.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gendocs_template: Link to GTK-DOC stuff.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: (release): Run gendocs.sh.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gendocs.sh, doc/gendocs_template: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Don't split HTML.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.c: Update.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.c: Doc fix.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am, doc/reference/Makefile.am: Add GTK-DOC.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/.cvsignore, doc/reference/.cvsignore: [no log message]
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * buildconf: Suggest --enable-gtk-doc.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * buildconf, configure.in: Need GTK-DOC.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Need GTK-DOC.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/parser_aux.c: Doc fix.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/structure.c: Doc fix.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Doc fix.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/ASN1.y: Doc fixes.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * NEWS: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/element.c, lib/libtasn1.h: (asn1_write_value): Fix prototype, to avoid warnings.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/element.c: (asn1_read_value): Fix prototype to avoid warning.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/libtasn1.h: Fix typo.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Remove tex manual stuff.  Simplify.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/int.h: Include libtasn1.h, to make sure we are using the same
+       prototypes that are exported.  Avoids duplication of code.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * lib/element.c: Fix warning.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Simplify shared library version computation.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove unused stuff.  Use modern autoconf/automake
+       interface.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Remove doc/scripts/.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/.cvsignore: [no log message]
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/asn1.tex, doc/fdl.tex, doc/scripts/.cvsignore,
+       doc/scripts/Makefile.am, doc/scripts/gdoc: Remove.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/fdl.texi: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/Makefile.am: Build texinfo manual.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/libtasn1.texi: Add, rewritten from asn1.tex.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * doc/gdoc: Add, from GNU Libidn.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * .cvsignore, doc/.cvsignore, doc/scripts/.cvsignore,
+       lib/.cvsignore, src/.cvsignore, tests/.cvsignore: Add.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: Generated.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: (ChangeLog): Use FSF format.  Use .cvsusers.
+
+2004-12-10  Simon Josefsson <simon@josefsson.org>
+
+       * .cvsusers: Add.
+
+2004-12-09  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Fix.
+
+2004-12-09  Simon Josefsson <simon@josefsson.org>
+
+       * ChangeLog: [no log message]
+
+2004-12-09  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am: Add release target.
+
+2004-12-09  Simon Josefsson <simon@josefsson.org>
+
+       * buildconf: Fix.
+
+2004-12-09  Simon Josefsson <simon@josefsson.org>
+
+       * INSTALL: Remove (generated automatically by buildconf).
+
+2004-11-10  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS: [no log message]
+
+2004-11-10  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/coding.c, lib/decoding.c, lib/parser_aux.c, lib/structure.c: 
+       corrected some access to invalid data.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * Makefile.am, lib/Makefile.am: Use EXTRA_DIST less.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Use dist target for libtasn1.m4.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * lib/Makefile.am: Remove libtasn1.vers.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * buildconf: Use autoreconf.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in, lib/Makefile.am, lib/libtasn1.vers: Replace ld
+       version script with libtool -export-symbols-regex.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * configure.in: Fix library dependency order.
+
+2004-11-03  Simon Josefsson <simon@josefsson.org>
+
+       * lib/decoding.c, lib/errors.c, lib/libtasn1.h, lib/parser_aux.c,
+       lib/structure.c: GTK-DOC fixes.
+
+2004-10-29  Simon Josefsson <simon@josefsson.org>
+
+       * lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/errors.h, lib/errors_int.h, lib/gstr.c, lib/gstr.h, lib/int.h,
+       lib/libtasn1.h, lib/parser_aux.c: Doc fixes, from Martijn Koster
+       <mak@greenhills.co.uk>.
+
+2004-09-08  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/decoding.c, lib/int.h, lib/libtasn1.h,
+       tests/Makefile.am, tests/Test_parser.c, tests/Test_tree.c: add self
+       test
+
+2004-07-23  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/libtasn1.m4: [no log message]
+
+2004-05-18  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS, lib/decoding.c: Corrected a DER decoding bug which was
+       reported by Max Vozeler <max@hinterhof.net>.
+
+2004-05-16  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * configure.in, lib/int.h: [no log message]
+
+2004-05-16  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS, configure.in, doc/README.autoconf, lib/Makefile.am,
+       lib/libtasn1-config.in, lib/libtasn1.h, lib/libtasn1.m4: Added
+       scripts to assist in libtasn1 version detection from configure
+       scripts.
+
+2004-04-20  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/int.h, lib/libtasn1.h: change INTEGR size
+       management
+
+2004-04-14  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/int.h, lib/libtasn1.h, lib/structure.c,
+       tests/Test_tree.c: add asn1_delete_elemenadd asn1_delete_element
+
+2004-02-28  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/int.h, lib/libtasn1.h: [no log message]
+
+2004-02-27  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * acconfig.h, configure.in: [no log message]
+
+2004-02-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/ASN1.c, lib/coding.c, lib/decoding.c, lib/element.c,
+       lib/int.h, lib/libtasn1.h: some fixes in prototypes.
+
+2004-02-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * src/asn1Decoding.c: [no log message]
+
+2004-02-26  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * src/Makefile.am, src/asn1Coding.c, src/asn1c.c: removed the asn1c
+       utility (it was replaced by asn1Coding anyway).
+
+2004-02-14  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS, configure.in, lib/ASN1.c, lib/Makefile.am,
+       lib/libtasn1.vers: added versioned symbols.
+
+2004-02-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/structure.c: [no log message]
+
+2003-11-12  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/defines.h, lib/mem.h: some fixes with alloca()
+
+2003-09-18  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/ASN1.y, lib/int.h, lib/libtasn1.h,
+       src/asn1Coding.c, tests/Test_parser.asn, tests/Test_tree.c: manage
+       'INTEGER(1 | 2)' syntax
+
+2003-07-30  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/Makefile.am, lib/coding.c,
+       lib/decoding.c, lib/der.h, lib/element.c, lib/int.h,
+       lib/libtasn1.h, src/CertificateExample.c, src/CrlExample.c,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       src/asn1c.c, tests/Test_parser.c, tests/Test_tree.asn,
+       tests/Test_tree.c: Add BER decoding
+
+2003-03-25  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, doc/asn1.tex, lib/coding.c, lib/element.c,
+       lib/int.h, lib/libtasn1.h, lib/parser_aux.c, tests/Test_parser.asn,
+       tests/Test_parser.c, tests/Test_tree.asn, tests/Test_tree.c,
+       tests/Test_tree_asn1_tab.c: Add DEFAULT with OID
+
+2003-03-19  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/coding.c, tests/Test_tree.asn, tests/Test_tree.c: change
+       asn1_find_structure_from_oid prototype
+
+2003-03-18  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, doc/asn1.tex, lib/decoding.c, lib/element.c,
+       lib/errors.c, lib/errors_int.h, lib/int.h, lib/libtasn1.h,
+       lib/structure.c, tests/Test_tree.c: change
+       asn1_find_structure_from_oid prototype
+
+2003-02-25  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * doc/asn1.tex: add vector length check
+
+2003-02-25  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/coding.c, lib/decoding.c, lib/element.c,
+       lib/int.h, lib/libtasn1.h, lib/parser_aux.c,
+       src/CertificateExample.c, src/CrlExample.c, src/asn1Coding.c,
+       tests/Test_tree.asn, tests/Test_tree.c, tests/Test_tree_asn1_tab.c: 
+       add vector length check
+
+2003-02-12  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, doc/asn1.tex, lib/decoding.c, lib/element.c,
+       lib/int.h, lib/libtasn1.h, lib/structure.c, tests/Test_tree.asn,
+       tests/Test_tree.c: add read_tag and get_structure_from_oid functions
+
+2003-02-10  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, lib/coding.c, lib/decoding.c, lib/element.c, lib/errors.c,
+       lib/gstr.h, lib/int.h, lib/libtasn1.h, lib/structure.c,
+       tests/Test_tree.asn, tests/Test_tree.c: OID with dots
+
+2003-02-06  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/errors.c: made the static string table constant.
+
+2003-02-05  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * doc/asn1.tex, lib/element.c, lib/structure.c,
+       src/asn1Coding_test.asg, tests/Test_parser.c, tests/Test_tree.asn,
+       tests/Test_tree.c: change asn1_create_element interface
+
+2003-02-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * tests/Test_tree.asn: change asn1_create_element interface
+
+2003-02-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/libtasn1.h: change asn1_create_element interface
+
+2003-02-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, configure.in, lib/Makefile.am, lib/decoding.c,
+       lib/defines.h, lib/element.c, lib/int.h, lib/parser_aux.c,
+       lib/structure.c, src/CertificateExample.c, src/CrlExample.c,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Test_parser.c, tests/Test_tree.c: change asn1_create_element
+       interface
+
+2003-02-03  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/coding.c: Error description is only used if it is != NULL.
+
+2002-12-28  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/ASN1.y, lib/gstr.c, lib/int.h, lib/parser_aux.c: some changes
+       for minitasn1
+
+2002-12-28  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/defines.h, lib/int.h: moved mem.h inclusion to int.h.
+
+2002-10-09  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * configure.in, lib/ASN1.c, lib/ASN1.y, lib/element.c,
+       lib/errors.c, lib/errors.h, lib/int.h: C99 macro
+
+2002-10-08  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/ASN1.c: [no log message]
+
+2002-10-07  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * NEWS, doc/Makefile.am, lib/coding.c, lib/decoding.c,
+       lib/element.c, lib/errors.c, lib/errors.h, lib/int.h,
+       lib/libtasn1.h, src/CertificateExample.c, src/CrlExample.c,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       tests/Test_parser.asn, tests/Test_parser.c, tests/Test_tree.asn,
+       tests/Test_tree.c: [no log message]
+
+2002-10-03  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * .cvsusers: Added .cvsusers, for use in ChangeLong generation.
+
+2002-10-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * src/asn1Parser.c: libtasn1
+
+2002-10-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * configure.in: version 0.1.2
+
+2002-10-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * THANKS: add Simon
+
+2002-10-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/coding.c, lib/decoding.c, lib/der.h, lib/element.c,
+       lib/int.h, lib/structure.c: add GeneralString type
+
+2002-10-03  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/ASN1.y, lib/parser_aux.c: prefix symbols and functions
+
+2002-10-02  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * configure.in: improved check for gnu assembler
+
+2002-07-09  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS: [no log message]
+
+2002-07-01  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * tests/Test_tree.asn, tests/Test_tree.c: [no log message]
+
+2002-07-01  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * configure.in: version 0.1.1
+
+2002-07-01  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/ASN1.c, lib/ASN1.y, lib/coding.c, lib/decoding.c, lib/der.h,
+       lib/element.c, lib/element.h, lib/int.h, lib/libtasn1.h,
+       lib/parser_aux.c, lib/parser_aux.h, lib/structure.c,
+       lib/structure.h: add const keyword
+
+2002-06-25  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/decoding.c: fix bug in asn1_der_decoding_element
+
+2002-06-25  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/decoding.c: added a check for null pointer.
+
+2002-06-25  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/decoding.c, lib/int.h: some minor fixes.
+
+2002-06-24  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/structure.c: [no log message]
+
+2002-06-24  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/decoding.c, lib/libtasn1.h: add asn1_expand_octet_string and
+       asn1_der_decoding_element functions
+
+2002-06-20  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/structure.c: [no log message]
+
+2002-06-20  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/decoding.c: fix asn1_expand_any_defined_by
+
+2002-06-20  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/der.h, lib/int.h: added some required prototypes
+
+2002-06-19  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/decoding.c, lib/element.c, lib/int.h, lib/libtasn1.h,
+       tests/Test_tree.asn, tests/Test_tree.c: add
+       asn1_expand_any_defined_by
+
+2002-06-19  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * AUTHORS: [no log message]
+
+2002-06-15  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * doc/Makefile.am: [no log message]
+
+2002-06-14  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/Makefile.am, lib/xml_print.c: Removed xml_print.c. Will be
+       moved to gnutls.
+
+2002-06-14  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * COPYING.LIB, Makefile.am, NEWS, lib/ASN1.y, lib/coding.c,
+       lib/decoding.c, lib/element.c, lib/errors.c, lib/gstr.c,
+       lib/libtasn1.h, lib/parser_aux.c, lib/structure.c, lib/xml_print.c: 
+       license changed to GNU Lesser GPL.
+
+2002-06-13  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/structure.c: [no log message]
+
+2002-06-13  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/Makefile.am, lib/xml_print.c: added xml_print
+
+2002-06-12  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * NEWS: [no log message]
+
+2002-06-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * src/CertificateExample.c, src/CrlExample.c, src/Makefile.am,
+       src/asn1Coding.c, src/asn1Decoding.c, src/asn1Parser.c,
+       src/asn1c.c, src/pkix_asn1_tab.c, tests/Makefile.am,
+       tests/Test_parser.c, tests/Test_tree.c, tests/Test_tree_asn1_tab.c: 
+       [no log message]
+
+2002-06-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/structure.c: [no log message]
+
+2002-06-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * configure.in, lib/Makefile.am, lib/libasn1.h, lib/libtasn1.h: 
+       renamed libasn1 to libtasn1
+
+2002-06-11  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/ASN1.c, lib/ASN1.y, lib/decoding.c, lib/libasn1.h,
+       lib/structure.c: Added check for NULL pointer in given error
+       strings.
+
+2002-05-27  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * tests/Test_parser.asn: version 0.1.0
+
+2002-05-27  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * AUTHORS: correct e-mail address
+
+2002-05-15  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/libasn1.h: Start Up version
+
+2002-05-15  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/ASN1.c, lib/ASN1.y, lib/coding.c, lib/decoding.c,
+       lib/element.c, lib/element.h, lib/errors.c, lib/errors.h,
+       lib/errors_int.h, lib/int.h, lib/parser_aux.c, lib/parser_aux.h,
+       lib/structure.c, lib/structure.h, src/asn1Coding.c,
+       src/asn1Coding_test.asg, src/asn1Coding_test.asn,
+       src/asn1Decoding.c, src/asn1Parser.c, src/pkix_asn1_tab.c,
+       tests/Makefile.am, tests/Test_parser.c, tests/Test_tree.asn,
+       tests/Test_tree.c, tests/Test_tree_asn1_tab.c: Start Up Version
+
+2002-05-15  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/ASN.c: Start Up version
+
+2002-05-15  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * Makefile.am, THANKS, configure.in, doc/TODO, doc/asn1.tex,
+       lib/ASN.y, lib/Makefile.am, lib/asn1.c, lib/asn1.h, lib/defines.h,
+       lib/der.c, lib/der.h, lib/gstr.c, lib/mem.h,
+       src/CertificateExample.c, src/CrlExample.c, src/Makefile.am,
+       src/asn1c.c: Start Up Version
+
+2002-04-10  Fabio Fiorina <fiorinaf@gnutls.org>
+
+       * lib/asn1.c, lib/der.c, src/CertificateExample.c,
+       src/CrlExample.c, src/asn1c.c: warning fix
+
+2002-04-08  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/Makefile.am: [no log message]
+
+2002-04-06  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * lib/asn1.c: better function reference - depends on latex now
+
+2002-04-06  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * doc/asn1.tex: [no log message]
+
+2002-04-05  Nikos Mavrogiannopoulos <nmav@gnutls.org>
+
+       * Initial revision
+
+       ----------------------------------------------------------------------
+       Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
+       Free Software Foundation, Inc.
+       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.
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644 (file)
index 0000000..daba47a
--- /dev/null
@@ -0,0 +1,129 @@
+# Having a separate GNUmakefile lets me `include' the dynamically
+# generated rules created via cfg.mk (package-local configuration)
+# as well as maint.mk (generic maintainer rules).
+# This makefile is used only if you run GNU Make.
+# It is necessary if you want to build targets usually of interest
+# only to the maintainer.
+
+# Copyright (C) 2001, 2003, 2006-2010 Free Software Foundation, Inc.
+
+# 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/>.
+
+# Systems where /bin/sh is not the default shell need this.  The $(shell)
+# command below won't work with e.g. stock DOS/Windows shells.
+ifeq ($(wildcard /bin/s[h]),/bin/sh)
+SHELL = /bin/sh
+else
+# will be used only with the next shell-test line, then overwritten
+# by a configured-in value
+SHELL = sh
+endif
+
+# If the user runs GNU make but has not yet run ./configure,
+# give them a diagnostic.
+_have-Makefile := $(shell test -f Makefile && echo yes)
+ifeq ($(_have-Makefile),yes)
+
+# Make tar archive easier to reproduce.
+export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner
+
+# Allow the user to add to this in the Makefile.
+ALL_RECURSIVE_TARGETS =
+
+include Makefile
+
+# Some projects override e.g., _autoreconf here.
+-include $(srcdir)/cfg.mk
+include $(srcdir)/maint.mk
+
+# Allow cfg.mk to override these.
+_build-aux ?= build-aux
+_autoreconf ?= autoreconf -v
+
+# Ensure that $(VERSION) is up to date for dist-related targets, but not
+# for others: rerunning autoreconf and recompiling everything isn't cheap.
+_have-git-version-gen := \
+  $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
+ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
+  _is-dist-target ?= $(filter-out %clean, \
+    $(filter maintainer-% dist% alpha beta major,$(MAKECMDGOALS)))
+  _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS)))
+  ifneq (,$(_is-dist-target)$(_is-install-target))
+    _curr-ver := $(shell cd $(srcdir) \
+                   && $(_build-aux)/git-version-gen .tarball-version)
+    ifneq ($(_curr-ver),$(VERSION))
+      ifeq ($(_curr-ver),UNKNOWN)
+        $(info WARNING: unable to verify if $(VERSION) is the correct version)
+      else
+        ifneq (,$(_is-install-target))
+          # GNU Coding Standards state that 'make install' should not cause
+          # recompilation after 'make all'.  But as long as changing the version
+          # string alters config.h, the cost of having 'make all' always have an
+          # up-to-date version is prohibitive.  So, as a compromise, we merely
+          # warn when installing a version string that is out of date; the user
+          # should run 'autoreconf' (or something like 'make distcheck') to
+          # fix the version, 'make all' to propagate it, then 'make install'.
+          $(info WARNING: version string $(VERSION) is out of date;)
+          $(info run '$(MAKE) _version' to fix it)
+        else
+          $(info INFO: running autoreconf for new version string: $(_curr-ver))
+GNUmakefile: _version
+       touch GNUmakefile
+        endif
+      endif
+    endif
+  endif
+endif
+
+.PHONY: _version
+_version:
+       cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
+       $(MAKE) $(AM_MAKEFLAGS) Makefile
+
+else
+
+.DEFAULT_GOAL := abort-due-to-no-makefile
+srcdir = .
+
+# The package can override .DEFAULT_GOAL to run actions like autoreconf.
+-include ./cfg.mk
+include ./maint.mk
+
+ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
+$(MAKECMDGOALS): abort-due-to-no-makefile
+endif
+
+abort-due-to-no-makefile:
+       @echo There seems to be no Makefile in this directory.   1>&2
+       @echo "You must run ./configure before running \`make'." 1>&2
+       @exit 1
+
+endif
+
+# Tell version 3.79 and up of GNU make to not build goals in this
+# directory in parallel, in case someone tries to build multiple
+# targets, and one of them can cause a recursive target to be invoked.
+
+# Only set this if Automake doesn't provide it.
+AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
+  $(RECURSIVE_CLEAN_TARGETS:-recursive=) \
+  dist distcheck tags ctags
+
+ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
+
+ifneq ($(word 2, $(MAKECMDGOALS)), )
+ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
+.NOTPARALLEL:
+endif
+endif
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..7d1c323
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,365 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+
+   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.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+   On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'.  It is recommended to use the following options:
+
+     ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS
+     KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..c7a8b00
--- /dev/null
@@ -0,0 +1,34 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+
+EXTRA_DIST = windows/asn1-parser/asn1-parser.vcproj            \
+       windows/asn1-parser/config.h windows/libtasn1.ncb       \
+       windows/libtasn1.sln windows/libtasn1.suo               \
+       windows/gnulib/getopt.h windows/gnulib/gnulib.vcproj    \
+       windows/libtasn1/libtasn1.vcproj                        \
+       windows/test-parser/test-parser.vcproj                  \
+       windows/test-tree/test-tree.vcproj
+
+SUBDIRS = gl lib src examples tests doc
+
+ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/glm4
+
+EXTRA_DIST += cfg.mk maint.mk .clcopying
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..d0ea36a
--- /dev/null
@@ -0,0 +1,1112 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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 = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+       $(top_srcdir)/configure AUTHORS COPYING COPYING.LIB ChangeLog \
+       INSTALL NEWS THANKS build-aux/config.guess \
+       build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+       build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \
+       build-aux/texinfo.tex build-aux/ylwrap
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir dist dist-all distcheck
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d "$(distdir)" \
+    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr "$(distdir)"; }; }
+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"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc
+EXTRA_DIST = windows/asn1-parser/asn1-parser.vcproj \
+       windows/asn1-parser/config.h windows/libtasn1.ncb \
+       windows/libtasn1.sln windows/libtasn1.suo \
+       windows/gnulib/getopt.h windows/gnulib/gnulib.vcproj \
+       windows/libtasn1/libtasn1.vcproj \
+       windows/test-parser/test-parser.vcproj \
+       windows/test-tree/test-tree.vcproj cfg.mk maint.mk .clcopying
+SUBDIRS = gl lib src examples tests doc
+ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/glm4
+all: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+             $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+       @if test ! -f $@; then \
+         rm -f stamp-h1; \
+         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+       else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+       @rm -f stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f config.h stamp-h1
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+distclean-libtool:
+       -rm -f libtool config.lt
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       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; \
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d "$(distdir)" || mkdir "$(distdir)"
+       @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 \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           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
+       -test -n "$(am__skip_mode_fix)" \
+       || find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzma: distdir
+       tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+       $(am__remove_distdir)
+
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lzma*) \
+         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.xz*) \
+         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       test -d $(distdir)/_build || exit 0; \
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && am__cwd=`pwd` \
+         && $(am__cd) $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+         && cd "$$am__cwd" \
+         || exit 1
+       $(am__remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @$(am__cd) '$(distuninstallcheck_dir)' \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile config.h
+installdirs: installdirs-recursive
+installdirs-am:
+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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
+       ctags-recursive install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am am--refresh check check-am clean clean-generic \
+       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
+       dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+       distcheck distclean distclean-generic distclean-hdr \
+       distclean-libtool distclean-tags distcleancheck distdir \
+       distuninstallcheck 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 \
+       installdirs-am maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags tags-recursive uninstall uninstall-am
+
+
+# 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/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..0398e10
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,327 @@
+GNU Libtasn1 NEWS                                     -*- outline -*-
+
+* Noteworthy changes in release 2.7 (2010-05-20) [stable]
+- Doc: Build a PDF manual using GTK-PDC.
+- Doc: Fix of asn1_check_version, documentation was missing from last release.
+- Build: Avoid warnings about ignored visibility attributes on Windows.
+
+* Noteworthy changes in release 2.6 (2010-04-20) [stable]
+- Fix build failure on platforms without support for GNU LD version scripts.
+- libtasn1: Simplified implementation of asn1_check_version.
+- tests: Improved self-checks.
+- Update gnulib files, fix many syntax-check nits, indent code,
+  fix license templates.
+
+* Noteworthy changes in release 2.5 (2010-03-15) [stable]
+- doc: Improve GTK-DOC comments.
+- misc: Updated gnulib files.
+
+* Noteworthy changes in release 2.4 (2010-01-18) [stable]
+- Doc fixes.
+- Updated gnulib files.
+- Clean up copyright notices.
+
+* Noteworthy changes in release 2.3 (2009-07-29) [stable]
+- Libtasn1 is now an official GNU project.
+- Solve build problem on Tru64 related to TRUE/FALSE.
+- More careful decoding of OIDs.
+- Fixed warning in ASN1.y.
+- Use "Software libraries" info dircategory.
+- Drop GPL/LGPL copies from the manual (not needed there).
+- New configure parameters to set packaging specific information.
+  The parameters are --with-packager, --with-packager-version, and
+  --with-packager-bug-reports.  See
+  <http://article.gmane.org/gmane.comp.lib.gnulib.bugs/17791> for more
+  details.
+
+* Noteworthy changes in release 2.2 (2009-05-20) [stable]
+- Change how the ASN1_API decorator is used in libtasn1.h, for GTK-DOC.
+- Changed license of libtasn1.pc from GPLv3+ to LGPLv2.1+.
+  Reported by Jeff Cai <Jeff.Cai@Sun.COM>.
+- Building with many warning flags now requires --enable-gcc-warnings.
+- Some warnings fixed.
+
+* Noteworthy changes in release 2.1 (2009-04-17) [stable]
+- Fix compilation failure on platforms that can't generate empty archives,
+  e.g., Mac OS X.  Reported by David Reiser <dbreiser@gmail.com>.
+
+* Noteworthy changes in release 2.0 (2009-04-13) [stable]
+- Optimized tree generation.
+- ASN1 parser code re-generated using Bison 2.4.1.
+- Build with more warning flags.  Many compiler warnings fixed.
+- Compiled with -fvisibility=hidden by default if supported.
+  See http://gcc.gnu.org/wiki/Visibility
+- The libtasn1-config tool has been removed.
+  For application developers, please stop using libtasn1-config for
+  finding libtasn1, use proper autoconf checks or pkg-config instead.
+  For users that need a libtasn1 that provides a libtasn1-config
+  script (for use with older applications), use libtasn1 v1.x instead.
+  Version 1.x is still supported.
+
+* Noteworthy changes in release 1.8 (2009-01-16) [stable]
+- Fix crlf self-test under Mingw+Wine.
+- Fix build problems on platforms that lack stdint.h.
+  Reported by Dagobert Michelsen <dam@opencsw.org> in
+  <http://thread.gmane.org/gmane.comp.encryption.gpg.gnutls.devel/3377>.
+
+* Noteworthy changes in release 1.7 (2008-11-17) [stable]
+- Add libtasn1-config for compatibility.
+  Please stop use it as it will disappear in v2.0!
+  Use standard AC_CHECK_FUNCS autoconf tests or pkg-config instead.
+- Read PKCS#12 blob as binary file, fixes self-tests under Mingw.
+- Fix use of __attribute__ ((deprecated)) to work on non-GCC (#106548).
+
+* Noteworthy changes in release 1.6 (2008-11-10) [stable]
+- Fixed namespace violation for MAX_NAME_SIZE and MAX_ERROR_DESCRIPTION_SIZE.
+  The new names are ASN1_MAX_NAME_SIZE and ASN1_MAX_ERROR_DESCRIPTION_SIZE.
+- Fixed namespace violation for libtasn1_perror and libtasn1_strerror.
+  The new names are asn1_perror and asn1_strerror.
+- Fix namespace violation for LIBASN1_VERSION.
+  The new name is ASN1_VERSION.
+- Decoder can now decode BER encoded octet strings.
+- doc: Change license on the manual to GFDLv1.3+.
+- doc: Sync gdoc script with GnuTLS, changes license on man-pages to GAP.
+- doc: Improve gtk-doc manual.
+- Assumes system has strdup and string.h.
+- Remove libtasn1-config and libtasn1.m4,
+  use standard AC_CHECK_FUNCS autoconf tests or pkg-config instead.
+- Change detection of when to use a linker version script,
+  use --enable-ld-version-script or --disable-ld-version-script to
+  override auto-detection logic.
+- API and ABI changes since last version:
+  asn1_get_length_ber: New function.
+  ASN1_VERSION: New symbol, replaces LIBTASN1_VERSION.
+  asn1_strerror: New function, replaces libtasn1_strerror.
+  asn1_perror: New function, replaces libtasn1_perror.
+  libtasn1_strerror: Marked as deprecated.
+  libtasn1_perror: Marked as deprecated.
+  LIBTASN1_VERSION: Deprecated.
+
+* Noteworthy changes in release 1.5 (2008-07-29) [stable]
+- Update gnulib files.
+- Fix memory leaks, from Christian Grothoff <christian@grothoff.org>.
+
+* Noteworthy changes in release 1.4 (2008-04-21) [stable]
+- Update gnulib files.
+- Replace uses of alloca with malloc.
+
+* Noteworthy changes in release 1.3 (2008-02-01) [stable]
+- Handle 'INTEGER { ... } (a..b)' regression.
+  Revert parts of earlier fix.  asn1Parser can now again parse src/pkix.asn1.
+  The ASN1.c file was generated using Bison 2.3.
+- Move examples from src/ to new directory examples/.
+- Duplicate copy of divergated pkix.asn removed.
+- Merge unnecessary lib/defines.h into lib/int.h.
+- Configure no longer tries to use gcc -pipe.
+- Update gnulib files.
+- Fix mem leak in self-test.
+
+* Noteworthy changes in release 1.2 (2007-12-10) [stable]
+- Update gnulib files.
+
+* Noteworthy changes in release 1.1 (2007-08-31) [stable]
+- Fix bug that made asn1_check_version believe that 1.0 is older than 0.3.10.
+
+* Noteworthy changes in release 1.0 (2007-08-31) [stable]
+- The self-tests, command line tools and build infrastructure have
+  been re-licensed from GPLv2 to GPLv3.
+- Doc fixes.
+- Update gnulib files.
+
+* Noteworthy changes in release 0.3.10 (2007-05-25)
+- Update gnulib files.
+
+* Noteworthy changes in release 0.3.9 (2007-03-02)
+- In generated code, config.h is pulled in if HAVE_CONFIG_H.
+- Development changes: changed from CVS to GIT as an experiment.
+  I push my changes to <http://repo.or.cz/w/libtasn1.git>.
+- Autoconf 2.61 and automake 1.10 is required.
+
+* Noteworthy changes in release 0.3.8 (2006-11-16)
+- Fix reading of binary files in asn1Decoding, for Windows.
+
+* Noteworthy changes in release 0.3.7 (2006-10-19)
+- When asn1_der_coding encoded a TYPE_NULL and the output buffer is
+  NULL, it would not increment the counter properly, so the size of
+  the required buffer would be off by one.  Fixed.  Reported by
+  Stephen Wrobleski <steve@localtoast.org>.
+- Fix configure to respect user-definable flags.  Reported by "Diego
+  'Flameeyes' Pettenò" <flameeyes@gentoo.org>.
+- The --help and --version outputs from the tools have been improved.
+
+* Noteworthy changes in release 0.3.6 (2006-08-13)
+- Fix man pages to use \- instead of - for negative signs (as in "-1").
+- Add -I's when building in src/, so that unistd.h etc is found on
+  systems that doesn't have them.
+- Valgrind isn't used for cross-compilation by default, and there is
+  also --disable-valgrind-tests to unconditionally disable it.
+- Valgrind is invoked without parameters, put things you like into
+  ~/.valgrindrc instead.
+
+* Noteworthy changes in release 0.3.5 (2006-06-27)
+- Fix asn1_octet_der to handle writes of zero-length buffers, before
+  it did not write the ASN.1 length for a zero-length buffer.  This caused
+  ASN.1 encodings to be incorrect on 64-bit platforms.
+- Add self test that attempt to trigger the above bug.
+- Fix test of -Wno-pointer-sign.
+- Improve cross-compilation to MinGW by using AC_LIBTOOL_WIN32_DLL.
+
+* Noteworthy changes in release 0.3.4 (2006-05-10)
+- Really fix encodings.
+- Add new self test, tests/Test_encoding.c.
+- Self tests are ran under valgrind, if it is available.
+- We test for the -Wno-pointer-sign parameter before using it.
+
+* Noteworthy changes in release 0.3.3 (2006-05-07)
+- Add some 'const' to prototypes.
+- Remove some 'unsigned' keywords.
+- Corrected asn1_der_coding() bug introduced when it became reentrant.
+  Now it produces correct encodings.
+
+* Noteworthy changes in release 0.3.2
+- Corrected bug in asn1_der_coding() which overwrited some
+  data in the original structure.
+- The asn1Parser, asn1Coding and asn1Decoding programs are now installed.
+
+* Noteworthy changes in release 0.3.1
+- Support constant size bit strings, as in 'BIT STRING (SIZE(42))'.
+  Reported by Cyril Holweck <cyril.holweck@q-free.com>.
+- Add two more APIs required by GnuTLS.
+- New public APIs:
+  asn1_find_node function
+  asn1_copy_node
+
+* Noteworthy changes in release 0.3.0
+- Export DER utility functions, mostly so that GnuTLS can avoid using
+  libtasn1 internals.
+- The _asn1* symbols are not exported in the shared library file (when
+  using GNU ld).
+- The library can now be built using Visual Studio, and the project
+  files are included in windows/.
+- New public APIs:
+  asn1_get_tag_der
+  asn1_octet_der
+  asn1_get_octet_der
+  asn1_bit_der
+  asn1_get_bit_der
+  asn1_get_length_der
+  asn1_length_der
+
+* Noteworthy changes in release 0.2.18
+- Fix out-of-bounds access in DER decoding, reported by Evgeny Legerov.
+- Add 'const' keyword to some prototypes, thanks to Frediano ZIGLIO.
+- Fixed typo in src/Makefile.am to make it build with objdir != srcdir,
+  thanks to Bernard Leak.
+- Update of gnulib files.
+- Typo fixes in comments, e.g. finish libasn1 to libtasn1 renaming,
+  use LGPL boiler plate on some files in lib/.
+
+* Noteworthy changes in release 0.2.17
+- Fixed typo to make it build.
+
+* Noteworthy changes in release 0.2.16
+- * Noteworthy changes in release script added again.
+
+* Noteworthy changes in release 0.2.15
+- Gnulib is used to implement memmove if your system does not have it.
+- Simplified assert/error handling slightly.
+
+* Noteworthy changes in release 0.2.14
+- Some build fixes.
+- Pkg-config script 'libtasn1.pc' added.
+- Postal address to FSF in license updated.
+
+* Noteworthy changes in release 0.2.13
+- * Noteworthy changes in release number in libtasn1.h updated properly.
+
+* Noteworthy changes in release 0.2.12
+- Manual converted to Texinfo format.
+- Manual in GTK-DOC and DevHelp formats added.
+- Man pages for all functions added.
+- Various internal cleanups.
+
+* Noteworthy changes in release 0.2.11
+- Added the self test with "make check" target
+- Added management of ANY type with null length
+- Corrected some writes to invalid data.
+
+* Noteworthy changes in release 0.2.10
+- Added scripts to assist in libtasn1 version detection
+  from configure scripts.
+- Corrected a DER decoding bug which was reported
+  by Max Vozeler <max@hinterhof.net>.
+
+* Noteworthy changes in release 0.2.9
+- Accept negative numbers as range in INTEGER declarations
+
+* Noteworthy changes in release 0.2.8
+- Add asn1_delete_element function
+
+* Noteworthy changes in release 0.2.7
+- Added versioned symbols.
+
+* Noteworthy changes in release 0.2.6
+- ASN.1 parser accepts these kinds of integer definitions:
+  "INTEGER (5 | 10)" and
+  "INTEGER (5)"
+- Comments start at "--" and finish at the "end of line" or
+  with another "--".
+
+* Noteworthy changes in release 0.2.5
+- Bug fix in ordering procedure for SET OF and SEQUENCE OF
+  types coding.
+- Manage structured format (BER encoding) in
+  asn1_der_decoding, asn1_decoding_element and
+  asn1_der_decoding_startEnd for OCTET STRING type.
+- Manage SEQUENCE and SET empty structure.
+- Manage "indefinite length method" in asn1_der_decoding,
+  asn1_decoding_element and asn1_der_decoding_startEnd
+  for the following types:
+  SEQUENCE, SEQUENCE OF, SET, and SET OF.
+- Bug fix in asn1_read_value with NULL parameter in case
+  of BIT STRING
+
+* Noteworthy changes in release 0.2.4
+- Bug fix in asn1_der_coding with NULL parameter
+- Manage DEFAULT option with OBJECT IDENTIFIER
+
+* Noteworthy changes in release 0.2.3
+- Chenge asn1_find_structure_from_oid prototype
+- Chenge asn1_find_structure_from_oid prototype
+- Add ASN1_MEM_ALLOC_ERROR return value
+
+* Noteworthy changes in release 0.2.2
+- Add vector length check in asn1_der_coding function
+- Add vector length check in asn1_der_coding function
+- Add vector length check in asn1_read_value function
+- Add asn1_check_version function
+
+* Noteworthy changes in release 0.2.1
+- Add asn1_find_structure_from_oid function
+- Add asn1_read_tag function
+
+* Noteworthy changes in release 0.2.0
+- Support for other platforms
+- Change asn1_create_element function interface (dest_name not needed any more)
+- Change OBJECT IDENTIFIER syntax: numbers must be separated by dot in
+  asn1_write_element and asn1_read_element functions (e.g. "1.2.3.4")
+
+* Noteworthy changes in release 0.1.2
+- Added GeneralString type
+- Fixed a DER encoding bug when nested tags are used
+
+* Noteworthy changes in release 0.1.1
+- Renamed to libtasn1
+- Functions which return a string for error description
+  now accept a NULL argument.
+- License is now GNU Lesser GPL
+
+* Noteworthy changes in release 0.1.0
+- Initial release
+
+----------------------------------------------------------------------
+Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+              2009, 2010 Free Software Foundation, Inc.
+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.
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..93ddee2
--- /dev/null
+++ b/README
@@ -0,0 +1,20 @@
+This is GNU Libtasn1, a small ASN.1 library.
+
+The C library (libtasn1.*) is licensed under the GNU Lesser General
+Public License version 2.1 or later.  See the file COPYING.LIB.
+
+The command line tool, self tests, examples, and other auxilliary
+files, are licensed under the GNU General Public License version 3.0
+or later.  See the file COPYING.
+
+The manual is in doc/.  You can also browse the manual and see updates
+about the project on the homepage:
+
+http://www.gnu.org/software/libtasn1/
+
+----------------------------------------------------------------------
+Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+              2009, 2010 Free Software Foundation, Inc.
+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.
diff --git a/THANKS b/THANKS
new file mode 100644 (file)
index 0000000..8e39626
--- /dev/null
+++ b/THANKS
@@ -0,0 +1,26 @@
+Here is a list of people, who helped the Libtasn1 project.
+
+Nikos Mavroyanopoulos   <nmav@hellug.gr>
+Simon Josefsson         <simon@josefsson.org>
+Martijn Koster          <mak@greenhills.co.uk>
+Albert Chin             <gnutls-dev@mlists.thewrittenword.com>
+Bernard Leak            <bernard@brenda-arkle.demon.co.uk>
+Frediano ZIGLIO         <Frediano.Ziglio@vodafone.com>
+Evgeny Legerov          <admin@gleg.net>
+Cyril Holweck           <cyril.holweck@q-free.com>
+Stephen Wrobleski       <steve@localtoast.org>
+Diego Pettenò           <flameeyes@gentoo.org>
+Michele Baldessari      <michele@pupazzo.org>
+Christian Grothoff      <christian@grothoff.org>
+Dagobert Michelsen      <dam@opencsw.org>
+David Reiser            <dbreiser@gmail.com>
+Didier Godefroy         <dg@ulysium.net>
+Andreas Metzler         <ametzler@downhill.at.eu.org>
+Ludovic Courtès         <ludo@gnu.org>
+
+----------------------------------------------------------------------
+Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+              2009, 2010 Free Software Foundation, Inc.
+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.
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..e031778
--- /dev/null
@@ -0,0 +1,989 @@
+# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# This file 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.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
+[m4_warning([this file was generated for autoconf 2.65.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.11'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.11.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.11.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 9
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 10
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+#serial 5
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 16
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.62])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES(CC)],
+                 [define([AC_PROG_CC],
+                         defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES(CXX)],
+                 [define([AC_PROG_CXX],
+                         defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES(OBJC)],
+                 [define([AC_PROG_OBJC],
+                         defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
+dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
+dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This macro
+dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2009  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 6
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 5
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
+    AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([lib/glm4/gnulib-comp.m4])
+m4_include([lib/glm4/ld-version-script.m4])
+m4_include([lib/glm4/string_h.m4])
+m4_include([lib/glm4/strverscmp.m4])
+m4_include([lib/glm4/visibility.m4])
+m4_include([gl/m4/00gnulib.m4])
+m4_include([gl/m4/autobuild.m4])
+m4_include([gl/m4/extensions.m4])
+m4_include([gl/m4/getopt.m4])
+m4_include([gl/m4/gnulib-common.m4])
+m4_include([gl/m4/gnulib-comp.m4])
+m4_include([gl/m4/include_next.m4])
+m4_include([gl/m4/longlong.m4])
+m4_include([gl/m4/malloc.m4])
+m4_include([gl/m4/manywarnings.m4])
+m4_include([gl/m4/multiarch.m4])
+m4_include([gl/m4/read-file.m4])
+m4_include([gl/m4/realloc.m4])
+m4_include([gl/m4/stdarg.m4])
+m4_include([gl/m4/stddef_h.m4])
+m4_include([gl/m4/stdint.m4])
+m4_include([gl/m4/stdlib_h.m4])
+m4_include([gl/m4/unistd_h.m4])
+m4_include([gl/m4/valgrind-tests.m4])
+m4_include([gl/m4/version-etc.m4])
+m4_include([gl/m4/warn-on-use.m4])
+m4_include([gl/m4/warnings.m4])
+m4_include([gl/m4/wchar_h.m4])
+m4_include([gl/m4/wchar_t.m4])
+m4_include([gl/m4/wint_t.m4])
+m4_include([m4/gtk-doc.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([m4/pkg.m4])
+m4_include([m4/update-header-version.m4])
diff --git a/build-aux/arg-nonnull.h b/build-aux/arg-nonnull.h
new file mode 100644 (file)
index 0000000..7e3e2db
--- /dev/null
@@ -0,0 +1,26 @@
+/* A C macro for declaring that specific arguments must not be NULL.
+   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+
+   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
+   Lesser 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/>.  */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/build-aux/c++defs.h b/build-aux/c++defs.h
new file mode 100644 (file)
index 0000000..0c2fad7
--- /dev/null
@@ -0,0 +1,271 @@
+/* C++ compatible function declaration macros.
+   Copyright (C) 2010 Free Software Foundation, Inc.
+
+   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
+   Lesser 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/>.  */
+
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+ */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      rettype (*const func) parameters = ::rpl_func;          \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      rettype (*const func) parameters =                           \
+        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+ */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* If we were to write
+       rettype (*const func) parameters = ::func;
+     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
+     better (remove an indirection through a 'static' pointer variable),
+     but then the _GL_CXXALIASWARN macro below would cause a warning not only
+     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                     \
+    {                                              \
+      static rettype (*func) parameters = ::func;  \
+    }                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static rettype (*func) parameters =               \
+        reinterpret_cast<rettype(*)parameters>(::func); \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static rettype (*func) parameters =                                     \
+        reinterpret_cast<rettype(*)parameters>(                               \
+          (rettype2(*)parameters2)(::func));                                  \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755 (executable)
index 0000000..c2246a4
--- /dev/null
@@ -0,0 +1,1502 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2009-12-30'
+
+# This file 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner.  Please send patches (context
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
+# entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+       for c in cc gcc c89 c99 ; do
+         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+            CC_FOR_BUILD="$c"; break ;
+         fi ;
+       done ;
+       if test x"$CC_FOR_BUILD" = x ; then
+         CC_FOR_BUILD=no_compiler_found ;
+       fi
+       ;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+       case "${UNAME_MACHINE_ARCH}" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently, or will in the future.
+       case "${UNAME_MACHINE_ARCH}" in
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               eval $set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep -q __ELF__
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "${UNAME_VERSION}" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "${machine}-${os}${release}"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       exit ;;
+    *:SolidBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    *:MirBSD:*:*)
+       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE="alpha" ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE="alpha" ;;
+           "EV5 (21164)")
+               UNAME_MACHINE="alphaev5" ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE="alphaev56" ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE="alphapca56" ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE="alphapca57" ;;
+           "EV6 (21264)")
+               UNAME_MACHINE="alphaev6" ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE="alphaev67" ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE="alphaev68" ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE="alphaev69" ;;
+           "EV7 (21364)")
+               UNAME_MACHINE="alphaev7" ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE="alphaev79" ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       exit ;;
+    Alpha\ *:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # Should we change UNAME_MACHINE based on the output of uname instead
+       # of the specific Alpha model?
+       echo alpha-pc-interix
+       exit ;;
+    21064:Windows_NT:50:3)
+       echo alpha-dec-winnt3.5
+       exit ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo ${UNAME_MACHINE}-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix${UNAME_RELEASE}
+       exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux${UNAME_RELEASE}
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       eval $set_cc_for_build
+       SUN_ARCH="i386"
+       # If there is a compiler, see if it is configured for 64-bit objects.
+       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+       # This test works for both compilers.
+       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               grep IS_64BIT_ARCH >/dev/null
+           then
+               SUN_ARCH="x86_64"
+           fi
+       fi
+       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos${UNAME_RELEASE}
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos${UNAME_RELEASE}
+               ;;
+           sun4)
+               echo sparc-sun-sunos${UNAME_RELEASE}
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos${UNAME_RELEASE}
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint${UNAME_RELEASE}
+        exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten${UNAME_RELEASE}
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten${UNAME_RELEASE}
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix${UNAME_RELEASE}
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix${UNAME_RELEASE}
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c &&
+         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`$dummy $dummyarg` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos${UNAME_RELEASE}
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       then
+           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           then
+               echo m88k-dg-dgux${UNAME_RELEASE}
+           else
+               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+           fi
+       else
+           echo i586-dg-dgux${UNAME_RELEASE}
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               eval $set_cc_for_build
+               sed 's/^                //' << EOF >$dummy.c
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[456])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+       fi
+       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       case "${UNAME_MACHINE}" in
+           9000/31? )            HP_ARCH=m68000 ;;
+           9000/[34]?? )         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+               fi
+               if [ "${HP_ARCH}" = "" ]; then
+                   eval $set_cc_for_build
+                   sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+               {
+               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+               case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+                   switch (bits)
+                       {
+                       case 64: puts ("hppa2.0w"); break;
+                       case 32: puts ("hppa2.0n"); break;
+                       default: puts ("hppa2.0"); break;
+                       } break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+                   puts ("hppa2.0"); break;
+              #endif
+               default: puts ("hppa1.0"); break;
+               }
+                  exit (0);
+              }
+EOF
+                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ ${HP_ARCH} = "hppa2.0w" ]
+       then
+           eval $set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep -q __LP64__
+           then
+               HP_ARCH="hppa2.0w"
+           else
+               HP_ARCH="hppa64"
+           fi
+       fi
+       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux${HPUX_REV}
+       exit ;;
+    3050*:HI-UX:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo ${UNAME_MACHINE}-unknown-osf1mk
+       else
+           echo ${UNAME_MACHINE}-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+        exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+        exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+        exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+        exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+        exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:BSD/OS:*:*)
+       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       exit ;;
+    *:FreeBSD:*:*)
+       case ${UNAME_MACHINE} in
+           pc98)
+               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           amd64)
+               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+           *)
+               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       esac
+       exit ;;
+    i*:CYGWIN*:*)
+       echo ${UNAME_MACHINE}-pc-cygwin
+       exit ;;
+    *:MINGW*:*)
+       echo ${UNAME_MACHINE}-pc-mingw32
+       exit ;;
+    i*:windows32*:*)
+       # uname -m includes "-pc" on this system.
+       echo ${UNAME_MACHINE}-mingw32
+       exit ;;
+    i*:PW*:*)
+       echo ${UNAME_MACHINE}-pc-pw32
+       exit ;;
+    *:Interix*:*)
+       case ${UNAME_MACHINE} in
+           x86)
+               echo i586-pc-interix${UNAME_RELEASE}
+               exit ;;
+           authenticamd | genuineintel | EM64T)
+               echo x86_64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix${UNAME_RELEASE}
+               exit ;;
+       esac ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+       echo i${UNAME_MACHINE}-pc-mks
+       exit ;;
+    8664:Windows_NT:*)
+       echo x86_64-pc-mks
+       exit ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+       # How do we know it's Interix rather than the generic POSIX subsystem?
+       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+       # UNAME_MACHINE based on the output of uname instead of i386?
+       echo i586-pc-interix
+       exit ;;
+    i*:UWIN*:*)
+       echo ${UNAME_MACHINE}-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    p*:CYGWIN*:*)
+       echo powerpcle-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+       exit ;;
+    i*86:Minix:*:*)
+       echo ${UNAME_MACHINE}-pc-minix
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+       echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+       exit ;;
+    arm*:Linux:*:*)
+       eval $set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo ${UNAME_MACHINE}-unknown-linux-gnu
+       else
+           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    cris:Linux:*:*)
+       echo cris-axis-linux-gnu
+       exit ;;
+    crisv32:Linux:*:*)
+       echo crisv32-axis-linux-gnu
+       exit ;;
+    frv:Linux:*:*)
+       echo frv-unknown-linux-gnu
+       exit ;;
+    i*86:Linux:*:*)
+       LIBC=gnu
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #ifdef __dietlibc__
+       LIBC=dietlibc
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+       echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+       exit ;;
+    ia64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m32r*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    m68*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+       eval $set_cc_for_build
+       sed 's/^        //' << EOF >$dummy.c
+       #undef CPU
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=${UNAME_MACHINE}el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=${UNAME_MACHINE}
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+       ;;
+    or32:Linux:*:*)
+       echo or32-unknown-linux-gnu
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-gnu
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-gnu
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-gnu ;;
+         PA8*) echo hppa2.0-unknown-linux-gnu ;;
+         *)    echo hppa-unknown-linux-gnu ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-gnu
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-gnu
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo ${UNAME_MACHINE}-ibm-linux
+       exit ;;
+    sh64*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sh*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    vax:Linux:*:*)
+       echo ${UNAME_MACHINE}-dec-linux-gnu
+       exit ;;
+    x86_64:Linux:*:*)
+       echo x86_64-unknown-linux-gnu
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo ${UNAME_MACHINE}-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo ${UNAME_MACHINE}-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo ${UNAME_MACHINE}-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo ${UNAME_MACHINE}-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+       echo i386-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    i*86:*DOS:*:*)
+       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+       else
+               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+       else
+               echo ${UNAME_MACHINE}-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configury will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+        exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv${UNAME_RELEASE}
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo ${UNAME_MACHINE}-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo ${UNAME_MACHINE}-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux${UNAME_RELEASE}
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv${UNAME_RELEASE}
+       else
+               echo mips-unknown-sysv${UNAME_RELEASE}
+       fi
+        exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux${UNAME_RELEASE}
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux${UNAME_RELEASE}
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Rhapsody:*:*)
+       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       case $UNAME_PROCESSOR in
+           i386)
+               eval $set_cc_for_build
+               if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+                 if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                     (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                     grep IS_64BIT_ARCH >/dev/null
+                 then
+                     UNAME_PROCESSOR="x86_64"
+                 fi
+               fi ;;
+           unknown) UNAME_PROCESSOR=powerpc ;;
+       esac
+       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = "x86"; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk${UNAME_RELEASE}
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       if test "$cputype" = "386"; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo ${UNAME_MACHINE}-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+       exit ;;
+    *:DragonFly:*:*)
+       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "${UNAME_MACHINE}" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       exit ;;
+    i*86:rdos:*:*)
+       echo ${UNAME_MACHINE}-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo ${UNAME_MACHINE}-pc-aros
+       exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+         ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+       printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+       printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+       { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+       echo c1-convex-bsd
+       exit ;;
+    c2*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    c34*)
+       echo c34-convex-bsd
+       exit ;;
+    c38*)
+       echo c38-convex-bsd
+       exit ;;
+    c4*)
+       echo c4-convex-bsd
+       exit ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches@gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/config.sub b/build-aux/config.sub
new file mode 100755 (executable)
index 0000000..c2d1257
--- /dev/null
@@ -0,0 +1,1714 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+#   Free Software Foundation, Inc.
+
+timestamp='2010-01-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to <config-patches@gnu.org>.  Submit a context
+# diff and a properly formatted GNU ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+  kopensolaris*-gnu* | \
+  storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+       -sun*os*)
+               # Prevent following clause from handling this invalid input.
+               ;;
+       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+       -apple | -axis | -knuth | -cray | -microblaze)
+               os=
+               basic_machine=$1
+               ;;
+        -bluegene*)
+               os=-cnk
+               ;;
+       -sim | -cisco | -oki | -wec | -winbond)
+               os=
+               basic_machine=$1
+               ;;
+       -scout)
+               ;;
+       -wrs)
+               os=-vxworks
+               basic_machine=$1
+               ;;
+       -chorusos*)
+               os=-chorusos
+               basic_machine=$1
+               ;;
+       -chorusrdb)
+               os=-chorusrdb
+               basic_machine=$1
+               ;;
+       -hiux*)
+               os=-hiuxwe2
+               ;;
+       -sco6)
+               os=-sco5v6
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5)
+               os=-sco3.2v5
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco4)
+               os=-sco3.2v4
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco3.2v[4-9]*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -sco*)
+               os=-sco3.2v2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -udk*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -isc)
+               os=-isc2.2
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -clix*)
+               basic_machine=clipper-intergraph
+               ;;
+       -isc*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+               ;;
+       -lynx*)
+               os=-lynxos
+               ;;
+       -ptx*)
+               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+               ;;
+       -windowsnt*)
+               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+               ;;
+       -psos*)
+               os=-psos
+               ;;
+       -mint | -mint[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+       # Recognize the basic CPU types without company name.
+       # Some are omitted here because they have special meanings below.
+       1750a | 580 \
+       | a29k \
+       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+       | am33_2.0 \
+       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+       | bfin \
+       | c4x | clipper \
+       | d10v | d30v | dlx | dsp16xx \
+       | fido | fr30 | frv \
+       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | i370 | i860 | i960 | ia64 \
+       | ip2k | iq2000 \
+       | lm32 \
+       | m32c | m32r | m32rle | m68000 | m68k | m88k \
+       | maxq | mb | microblaze | mcore | mep | metag \
+       | mips | mipsbe | mipseb | mipsel | mipsle \
+       | mips16 \
+       | mips64 | mips64el \
+       | mips64octeon | mips64octeonel \
+       | mips64orion | mips64orionel \
+       | mips64r5900 | mips64r5900el \
+       | mips64vr | mips64vrel \
+       | mips64vr4100 | mips64vr4100el \
+       | mips64vr4300 | mips64vr4300el \
+       | mips64vr5000 | mips64vr5000el \
+       | mips64vr5900 | mips64vr5900el \
+       | mipsisa32 | mipsisa32el \
+       | mipsisa32r2 | mipsisa32r2el \
+       | mipsisa64 | mipsisa64el \
+       | mipsisa64r2 | mipsisa64r2el \
+       | mipsisa64sb1 | mipsisa64sb1el \
+       | mipsisa64sr71k | mipsisa64sr71kel \
+       | mipstx39 | mipstx39el \
+       | mn10200 | mn10300 \
+       | moxie \
+       | mt \
+       | msp430 \
+       | nios | nios2 \
+       | ns16k | ns32k \
+       | or32 \
+       | pdp10 | pdp11 | pj | pjl \
+       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+       | pyramid \
+       | rx \
+       | score \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh64 | sh64le \
+       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+       | spu | strongarm \
+       | tahoe | thumb | tic4x | tic80 | tron \
+       | ubicom32 \
+       | v850 | v850e \
+       | we32k \
+       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+       | z8k | z80)
+               basic_machine=$basic_machine-unknown
+               ;;
+       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
+               # Motorola 68HC11/12.
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
+       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+               ;;
+       ms1)
+               basic_machine=mt-unknown
+               ;;
+
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+         basic_machine=$basic_machine-pc
+         ;;
+       # Object if more than one company name word.
+       *-*-*)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+       # Recognize the basic CPU types with company name.
+       580-* \
+       | a29k-* \
+       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+       | avr-* | avr32-* \
+       | bfin-* | bs2000-* \
+       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+       | clipper-* | craynv-* | cydra-* \
+       | d10v-* | d30v-* | dlx-* \
+       | elxsi-* \
+       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+       | h8300-* | h8500-* \
+       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | i*86-* | i860-* | i960-* | ia64-* \
+       | ip2k-* | iq2000-* \
+       | lm32-* \
+       | m32c-* | m32r-* | m32rle-* \
+       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+       | mips16-* \
+       | mips64-* | mips64el-* \
+       | mips64octeon-* | mips64octeonel-* \
+       | mips64orion-* | mips64orionel-* \
+       | mips64r5900-* | mips64r5900el-* \
+       | mips64vr-* | mips64vrel-* \
+       | mips64vr4100-* | mips64vr4100el-* \
+       | mips64vr4300-* | mips64vr4300el-* \
+       | mips64vr5000-* | mips64vr5000el-* \
+       | mips64vr5900-* | mips64vr5900el-* \
+       | mipsisa32-* | mipsisa32el-* \
+       | mipsisa32r2-* | mipsisa32r2el-* \
+       | mipsisa64-* | mipsisa64el-* \
+       | mipsisa64r2-* | mipsisa64r2el-* \
+       | mipsisa64sb1-* | mipsisa64sb1el-* \
+       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+       | mipstx39-* | mipstx39el-* \
+       | mmix-* \
+       | mt-* \
+       | msp430-* \
+       | nios-* | nios2-* \
+       | none-* | np1-* | ns16k-* | ns32k-* \
+       | orion-* \
+       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+       | pyramid-* \
+       | romp-* | rs6000-* | rx-* \
+       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+       | sparclite-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+       | tahoe-* | thumb-* \
+       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+       | tile-* | tilegx-* \
+       | tron-* \
+       | ubicom32-* \
+       | v850-* | v850e-* | vax-* \
+       | we32k-* \
+       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+       | xstormy16-* | xtensa*-* \
+       | ymp-* \
+       | z8k-* | z80-*)
+               ;;
+       # Recognize the basic CPU types without company name, with glob match.
+       xtensa*)
+               basic_machine=$basic_machine-unknown
+               ;;
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       386bsd)
+               basic_machine=i386-unknown
+               os=-bsd
+               ;;
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               basic_machine=m68000-att
+               ;;
+       3b*)
+               basic_machine=we32k-att
+               ;;
+       a29khif)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       abacus)
+               basic_machine=abacus-unknown
+               ;;
+       adobe68k)
+               basic_machine=m68010-adobe
+               os=-scout
+               ;;
+       alliant | fx80)
+               basic_machine=fx80-alliant
+               ;;
+       altos | altos3068)
+               basic_machine=m68k-altos
+               ;;
+       am29k)
+               basic_machine=a29k-none
+               os=-bsd
+               ;;
+       amd64)
+               basic_machine=x86_64-pc
+               ;;
+       amd64-*)
+               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       amdahl)
+               basic_machine=580-amdahl
+               os=-sysv
+               ;;
+       amiga | amiga-*)
+               basic_machine=m68k-unknown
+               ;;
+       amigaos | amigados)
+               basic_machine=m68k-unknown
+               os=-amigaos
+               ;;
+       amigaunix | amix)
+               basic_machine=m68k-unknown
+               os=-sysv4
+               ;;
+       apollo68)
+               basic_machine=m68k-apollo
+               os=-sysv
+               ;;
+       apollo68bsd)
+               basic_machine=m68k-apollo
+               os=-bsd
+               ;;
+       aros)
+               basic_machine=i386-pc
+               os=-aros
+               ;;
+       aux)
+               basic_machine=m68k-apple
+               os=-aux
+               ;;
+       balance)
+               basic_machine=ns32k-sequent
+               os=-dynix
+               ;;
+       blackfin)
+               basic_machine=bfin-unknown
+               os=-linux
+               ;;
+       blackfin-*)
+               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       bluegene*)
+               basic_machine=powerpc-ibm
+               os=-cnk
+               ;;
+       c90)
+               basic_machine=c90-cray
+               os=-unicos
+               ;;
+        cegcc)
+               basic_machine=arm-unknown
+               os=-cegcc
+               ;;
+       convex-c1)
+               basic_machine=c1-convex
+               os=-bsd
+               ;;
+       convex-c2)
+               basic_machine=c2-convex
+               os=-bsd
+               ;;
+       convex-c32)
+               basic_machine=c32-convex
+               os=-bsd
+               ;;
+       convex-c34)
+               basic_machine=c34-convex
+               os=-bsd
+               ;;
+       convex-c38)
+               basic_machine=c38-convex
+               os=-bsd
+               ;;
+       cray | j90)
+               basic_machine=j90-cray
+               os=-unicos
+               ;;
+       craynv)
+               basic_machine=craynv-cray
+               os=-unicosmp
+               ;;
+       cr16)
+               basic_machine=cr16-unknown
+               os=-elf
+               ;;
+       crds | unos)
+               basic_machine=m68k-crds
+               ;;
+       crisv32 | crisv32-* | etraxfs*)
+               basic_machine=crisv32-axis
+               ;;
+       cris | cris-* | etrax*)
+               basic_machine=cris-axis
+               ;;
+       crx)
+               basic_machine=crx-unknown
+               os=-elf
+               ;;
+       da30 | da30-*)
+               basic_machine=m68k-da30
+               ;;
+       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+               basic_machine=mips-dec
+               ;;
+       decsystem10* | dec10*)
+               basic_machine=pdp10-dec
+               os=-tops10
+               ;;
+       decsystem20* | dec20*)
+               basic_machine=pdp10-dec
+               os=-tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               basic_machine=m68k-motorola
+               ;;
+       delta88)
+               basic_machine=m88k-motorola
+               os=-sysv3
+               ;;
+       dicos)
+               basic_machine=i686-pc
+               os=-dicos
+               ;;
+       djgpp)
+               basic_machine=i586-pc
+               os=-msdosdjgpp
+               ;;
+       dpx20 | dpx20-*)
+               basic_machine=rs6000-bull
+               os=-bosx
+               ;;
+       dpx2* | dpx2*-bull)
+               basic_machine=m68k-bull
+               os=-sysv3
+               ;;
+       ebmon29k)
+               basic_machine=a29k-amd
+               os=-ebmon
+               ;;
+       elxsi)
+               basic_machine=elxsi-elxsi
+               os=-bsd
+               ;;
+       encore | umax | mmax)
+               basic_machine=ns32k-encore
+               ;;
+       es1800 | OSE68k | ose68k | ose | OSE)
+               basic_machine=m68k-ericsson
+               os=-ose
+               ;;
+       fx2800)
+               basic_machine=i860-alliant
+               ;;
+       genix)
+               basic_machine=ns32k-ns
+               ;;
+       gmicro)
+               basic_machine=tron-gmicro
+               os=-sysv
+               ;;
+       go32)
+               basic_machine=i386-pc
+               os=-go32
+               ;;
+       h3050r* | hiux*)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       h8300hms)
+               basic_machine=h8300-hitachi
+               os=-hms
+               ;;
+       h8300xray)
+               basic_machine=h8300-hitachi
+               os=-xray
+               ;;
+       h8500hms)
+               basic_machine=h8500-hitachi
+               os=-hms
+               ;;
+       harris)
+               basic_machine=m88k-harris
+               os=-sysv3
+               ;;
+       hp300-*)
+               basic_machine=m68k-hp
+               ;;
+       hp300bsd)
+               basic_machine=m68k-hp
+               os=-bsd
+               ;;
+       hp300hpux)
+               basic_machine=m68k-hp
+               os=-hpux
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               basic_machine=m68000-hp
+               ;;
+       hp9k3[2-9][0-9])
+               basic_machine=m68k-hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               basic_machine=hppa1.1-hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               basic_machine=hppa1.0-hp
+               ;;
+       hppa-next)
+               os=-nextstep3
+               ;;
+       hppaosf)
+               basic_machine=hppa1.1-hp
+               os=-osf
+               ;;
+       hppro)
+               basic_machine=hppa1.1-hp
+               os=-proelf
+               ;;
+       i370-ibm* | ibm*)
+               basic_machine=i370-ibm
+               ;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+       i*86v32)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv32
+               ;;
+       i*86v4*)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv4
+               ;;
+       i*86v)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-sysv
+               ;;
+       i*86sol2)
+               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+               os=-solaris2
+               ;;
+       i386mach)
+               basic_machine=i386-mach
+               os=-mach
+               ;;
+       i386-vsta | vsta)
+               basic_machine=i386-unknown
+               os=-vsta
+               ;;
+       iris | iris4d)
+               basic_machine=mips-sgi
+               case $os in
+                   -irix*)
+                       ;;
+                   *)
+                       os=-irix4
+                       ;;
+               esac
+               ;;
+       isi68 | isi)
+               basic_machine=m68k-isi
+               os=-sysv
+               ;;
+       m68knommu)
+               basic_machine=m68k-unknown
+               os=-linux
+               ;;
+       m68knommu-*)
+               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       m88k-omron*)
+               basic_machine=m88k-omron
+               ;;
+       magnum | m3230)
+               basic_machine=mips-mips
+               os=-sysv
+               ;;
+       merlin)
+               basic_machine=ns32k-utek
+               os=-sysv
+               ;;
+        microblaze)
+               basic_machine=microblaze-xilinx
+               ;;
+       mingw32)
+               basic_machine=i386-pc
+               os=-mingw32
+               ;;
+       mingw32ce)
+               basic_machine=arm-unknown
+               os=-mingw32ce
+               ;;
+       miniframe)
+               basic_machine=m68000-convergent
+               ;;
+       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               basic_machine=m68k-atari
+               os=-mint
+               ;;
+       mips3*-*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+               ;;
+       mips3*)
+               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+               ;;
+       monitor)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       morphos)
+               basic_machine=powerpc-unknown
+               os=-morphos
+               ;;
+       msdos)
+               basic_machine=i386-pc
+               os=-msdos
+               ;;
+       ms1-*)
+               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+               ;;
+       mvs)
+               basic_machine=i370-ibm
+               os=-mvs
+               ;;
+       ncr3000)
+               basic_machine=i486-ncr
+               os=-sysv4
+               ;;
+       netbsd386)
+               basic_machine=i386-unknown
+               os=-netbsd
+               ;;
+       netwinder)
+               basic_machine=armv4l-rebel
+               os=-linux
+               ;;
+       news | news700 | news800 | news900)
+               basic_machine=m68k-sony
+               os=-newsos
+               ;;
+       news1000)
+               basic_machine=m68030-sony
+               os=-newsos
+               ;;
+       news-3600 | risc-news)
+               basic_machine=mips-sony
+               os=-newsos
+               ;;
+       necv70)
+               basic_machine=v70-nec
+               os=-sysv
+               ;;
+       next | m*-next )
+               basic_machine=m68k-next
+               case $os in
+                   -nextstep* )
+                       ;;
+                   -ns2*)
+                     os=-nextstep2
+                       ;;
+                   *)
+                     os=-nextstep3
+                       ;;
+               esac
+               ;;
+       nh3000)
+               basic_machine=m68k-harris
+               os=-cxux
+               ;;
+       nh[45]000)
+               basic_machine=m88k-harris
+               os=-cxux
+               ;;
+       nindy960)
+               basic_machine=i960-intel
+               os=-nindy
+               ;;
+       mon960)
+               basic_machine=i960-intel
+               os=-mon960
+               ;;
+       nonstopux)
+               basic_machine=mips-compaq
+               os=-nonstopux
+               ;;
+       np1)
+               basic_machine=np1-gould
+               ;;
+       nsr-tandem)
+               basic_machine=nsr-tandem
+               ;;
+       op50n-* | op60c-*)
+               basic_machine=hppa1.1-oki
+               os=-proelf
+               ;;
+       openrisc | openrisc-*)
+               basic_machine=or32-unknown
+               ;;
+       os400)
+               basic_machine=powerpc-ibm
+               os=-os400
+               ;;
+       OSE68000 | ose68000)
+               basic_machine=m68000-ericsson
+               os=-ose
+               ;;
+       os68k)
+               basic_machine=m68k-none
+               os=-os68k
+               ;;
+       pa-hitachi)
+               basic_machine=hppa1.1-hitachi
+               os=-hiuxwe2
+               ;;
+       paragon)
+               basic_machine=i860-intel
+               os=-osf
+               ;;
+       parisc)
+               basic_machine=hppa-unknown
+               os=-linux
+               ;;
+       parisc-*)
+               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+               os=-linux
+               ;;
+       pbd)
+               basic_machine=sparc-tti
+               ;;
+       pbb)
+               basic_machine=m68k-tti
+               ;;
+       pc532 | pc532-*)
+               basic_machine=ns32k-pc532
+               ;;
+       pc98)
+               basic_machine=i386-pc
+               ;;
+       pc98-*)
+               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium | p5 | k5 | k6 | nexgen | viac3)
+               basic_machine=i586-pc
+               ;;
+       pentiumpro | p6 | 6x86 | athlon | athlon_*)
+               basic_machine=i686-pc
+               ;;
+       pentiumii | pentium2 | pentiumiii | pentium3)
+               basic_machine=i686-pc
+               ;;
+       pentium4)
+               basic_machine=i786-pc
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pentium4-*)
+               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       pn)
+               basic_machine=pn-gould
+               ;;
+       power)  basic_machine=power-ibm
+               ;;
+       ppc)    basic_machine=powerpc-unknown
+               ;;
+       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppcle | powerpclittle | ppc-le | powerpc-little)
+               basic_machine=powerpcle-unknown
+               ;;
+       ppcle-* | powerpclittle-*)
+               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64)  basic_machine=powerpc64-unknown
+               ;;
+       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+               basic_machine=powerpc64le-unknown
+               ;;
+       ppc64le-* | powerpc64little-*)
+               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+               ;;
+       ps2)
+               basic_machine=i386-ibm
+               ;;
+       pw32)
+               basic_machine=i586-unknown
+               os=-pw32
+               ;;
+       rdos)
+               basic_machine=i386-pc
+               os=-rdos
+               ;;
+       rom68k)
+               basic_machine=m68k-rom68k
+               os=-coff
+               ;;
+       rm[46]00)
+               basic_machine=mips-siemens
+               ;;
+       rtpc | rtpc-*)
+               basic_machine=romp-ibm
+               ;;
+       s390 | s390-*)
+               basic_machine=s390-ibm
+               ;;
+       s390x | s390x-*)
+               basic_machine=s390x-ibm
+               ;;
+       sa29200)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       sb1)
+               basic_machine=mipsisa64sb1-unknown
+               ;;
+       sb1el)
+               basic_machine=mipsisa64sb1el-unknown
+               ;;
+       sde)
+               basic_machine=mipsisa32-sde
+               os=-elf
+               ;;
+       sei)
+               basic_machine=mips-sei
+               os=-seiux
+               ;;
+       sequent)
+               basic_machine=i386-sequent
+               ;;
+       sh)
+               basic_machine=sh-hitachi
+               os=-hms
+               ;;
+       sh5el)
+               basic_machine=sh5le-unknown
+               ;;
+       sh64)
+               basic_machine=sh64-unknown
+               ;;
+       sparclite-wrs | simso-wrs)
+               basic_machine=sparclite-wrs
+               os=-vxworks
+               ;;
+       sps7)
+               basic_machine=m68k-bull
+               os=-sysv2
+               ;;
+       spur)
+               basic_machine=spur-unknown
+               ;;
+       st2000)
+               basic_machine=m68k-tandem
+               ;;
+       stratus)
+               basic_machine=i860-stratus
+               os=-sysv4
+               ;;
+       sun2)
+               basic_machine=m68000-sun
+               ;;
+       sun2os3)
+               basic_machine=m68000-sun
+               os=-sunos3
+               ;;
+       sun2os4)
+               basic_machine=m68000-sun
+               os=-sunos4
+               ;;
+       sun3os3)
+               basic_machine=m68k-sun
+               os=-sunos3
+               ;;
+       sun3os4)
+               basic_machine=m68k-sun
+               os=-sunos4
+               ;;
+       sun4os3)
+               basic_machine=sparc-sun
+               os=-sunos3
+               ;;
+       sun4os4)
+               basic_machine=sparc-sun
+               os=-sunos4
+               ;;
+       sun4sol2)
+               basic_machine=sparc-sun
+               os=-solaris2
+               ;;
+       sun3 | sun3-*)
+               basic_machine=m68k-sun
+               ;;
+       sun4)
+               basic_machine=sparc-sun
+               ;;
+       sun386 | sun386i | roadrunner)
+               basic_machine=i386-sun
+               ;;
+       sv1)
+               basic_machine=sv1-cray
+               os=-unicos
+               ;;
+       symmetry)
+               basic_machine=i386-sequent
+               os=-dynix
+               ;;
+       t3e)
+               basic_machine=alphaev5-cray
+               os=-unicos
+               ;;
+       t90)
+               basic_machine=t90-cray
+               os=-unicos
+               ;;
+       tic54x | c54x*)
+               basic_machine=tic54x-unknown
+               os=-coff
+               ;;
+       tic55x | c55x*)
+               basic_machine=tic55x-unknown
+               os=-coff
+               ;;
+       tic6x | c6x*)
+               basic_machine=tic6x-unknown
+               os=-coff
+               ;;
+        # This must be matched before tile*.
+        tilegx*)
+               basic_machine=tilegx-unknown
+               os=-linux-gnu
+               ;;
+       tile*)
+               basic_machine=tile-unknown
+               os=-linux-gnu
+               ;;
+       tx39)
+               basic_machine=mipstx39-unknown
+               ;;
+       tx39el)
+               basic_machine=mipstx39el-unknown
+               ;;
+       toad1)
+               basic_machine=pdp10-xkl
+               os=-tops20
+               ;;
+       tower | tower-32)
+               basic_machine=m68k-ncr
+               ;;
+       tpf)
+               basic_machine=s390x-ibm
+               os=-tpf
+               ;;
+       udi29k)
+               basic_machine=a29k-amd
+               os=-udi
+               ;;
+       ultra3)
+               basic_machine=a29k-nyu
+               os=-sym1
+               ;;
+       v810 | necv810)
+               basic_machine=v810-nec
+               os=-none
+               ;;
+       vaxv)
+               basic_machine=vax-dec
+               os=-sysv
+               ;;
+       vms)
+               basic_machine=vax-dec
+               os=-vms
+               ;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+       vxworks960)
+               basic_machine=i960-wrs
+               os=-vxworks
+               ;;
+       vxworks68)
+               basic_machine=m68k-wrs
+               os=-vxworks
+               ;;
+       vxworks29k)
+               basic_machine=a29k-wrs
+               os=-vxworks
+               ;;
+       w65*)
+               basic_machine=w65-wdc
+               os=-none
+               ;;
+       w89k-*)
+               basic_machine=hppa1.1-winbond
+               os=-proelf
+               ;;
+       xbox)
+               basic_machine=i686-pc
+               os=-mingw32
+               ;;
+       xps | xps100)
+               basic_machine=xps100-honeywell
+               ;;
+       ymp)
+               basic_machine=ymp-cray
+               os=-unicos
+               ;;
+       z8k-*-coff)
+               basic_machine=z8k-unknown
+               os=-sim
+               ;;
+       z80-*-coff)
+               basic_machine=z80-unknown
+               os=-sim
+               ;;
+       none)
+               basic_machine=none-none
+               os=-none
+               ;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               basic_machine=hppa1.1-winbond
+               ;;
+       op50n)
+               basic_machine=hppa1.1-oki
+               ;;
+       op60c)
+               basic_machine=hppa1.1-oki
+               ;;
+       romp)
+               basic_machine=romp-ibm
+               ;;
+       mmix)
+               basic_machine=mmix-knuth
+               ;;
+       rs6000)
+               basic_machine=rs6000-ibm
+               ;;
+       vax)
+               basic_machine=vax-dec
+               ;;
+       pdp10)
+               # there are many clones, so DEC is not a safe bet
+               basic_machine=pdp10-unknown
+               ;;
+       pdp11)
+               basic_machine=pdp11-dec
+               ;;
+       we32k)
+               basic_machine=we32k-att
+               ;;
+       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+               basic_machine=sh-unknown
+               ;;
+       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+               basic_machine=sparc-sun
+               ;;
+       cydra)
+               basic_machine=cydra-cydrome
+               ;;
+       orion)
+               basic_machine=orion-highlevel
+               ;;
+       orion105)
+               basic_machine=clipper-highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               basic_machine=m68k-apple
+               ;;
+       pmac | pmac-mpw)
+               basic_machine=powerpc-apple
+               ;;
+       *-unknown)
+               # Make sure to match an already-canonicalized machine name.
+               ;;
+       *)
+               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+       *-digital*)
+               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+               ;;
+       *-commodore*)
+               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+       # -solaris* is a basic system type, with this one exception.
+        -auroraux)
+               os=-auroraux
+               ;;
+       -solaris1 | -solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       -solaris)
+               os=-solaris2
+               ;;
+       -svr4*)
+               os=-sysv4
+               ;;
+       -unixware*)
+               os=-sysv4.2uw
+               ;;
+       -gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # First accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST END IN A *, to match a version number.
+       # -sysv* is not here because it comes later, after sysvr4.
+       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+             | -sym* | -kopensolaris* \
+             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+             | -aos* | -aros* \
+             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+             | -openbsd* | -solidbsd* \
+             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+             | -chorusos* | -chorusrdb* | -cegcc* \
+             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+             | -uxpv* | -beos* | -mpeix* | -udk* \
+             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       -qnx*)
+               case $basic_machine in
+                   x86-* | i*86-*)
+                       ;;
+                   *)
+                       os=-nto$os
+                       ;;
+               esac
+               ;;
+       -nto-qnx*)
+               ;;
+       -nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+               ;;
+       -mac*)
+               os=`echo $os | sed -e 's|mac|macos|'`
+               ;;
+       -linux-dietlibc)
+               os=-linux-dietlibc
+               ;;
+       -linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       -sunos5*)
+               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+               ;;
+       -sunos6*)
+               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+               ;;
+       -opened*)
+               os=-openedition
+               ;;
+        -os400*)
+               os=-os400
+               ;;
+       -wince*)
+               os=-wince
+               ;;
+       -osfrose*)
+               os=-osfrose
+               ;;
+       -osf*)
+               os=-osf
+               ;;
+       -utek*)
+               os=-bsd
+               ;;
+       -dynix*)
+               os=-bsd
+               ;;
+       -acis*)
+               os=-aos
+               ;;
+       -atheos*)
+               os=-atheos
+               ;;
+       -syllable*)
+               os=-syllable
+               ;;
+       -386bsd)
+               os=-bsd
+               ;;
+       -ctix* | -uts*)
+               os=-sysv
+               ;;
+       -nova*)
+               os=-rtmk-nova
+               ;;
+       -ns2 )
+               os=-nextstep2
+               ;;
+       -nsk*)
+               os=-nsk
+               ;;
+       # Preserve the version number of sinix5.
+       -sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       -sinix*)
+               os=-sysv4
+               ;;
+        -tpf*)
+               os=-tpf
+               ;;
+       -triton*)
+               os=-sysv3
+               ;;
+       -oss*)
+               os=-sysv3
+               ;;
+       -svr4)
+               os=-sysv4
+               ;;
+       -svr3)
+               os=-sysv3
+               ;;
+       -sysvr4)
+               os=-sysv4
+               ;;
+       # This must come after -sysvr4.
+       -sysv*)
+               ;;
+       -ose*)
+               os=-ose
+               ;;
+       -es1800*)
+               os=-ose
+               ;;
+       -xenix)
+               os=-xenix
+               ;;
+       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+               os=-mint
+               ;;
+       -aros*)
+               os=-aros
+               ;;
+       -kaos*)
+               os=-kaos
+               ;;
+       -zvmoe)
+               os=-zvmoe
+               ;;
+       -dicos*)
+               os=-dicos
+               ;;
+        -nacl*)
+               ;;
+       -none)
+               ;;
+       *)
+               # Get rid of the `-' at the beginning of $os.
+               os=`echo $os | sed 's/[^-]*-//'`
+               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+        score-*)
+               os=-elf
+               ;;
+        spu-*)
+               os=-elf
+               ;;
+       *-acorn)
+               os=-riscix1.2
+               ;;
+       arm*-rebel)
+               os=-linux
+               ;;
+       arm*-semi)
+               os=-aout
+               ;;
+        c4x-* | tic4x-*)
+               os=-coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=-tops20
+               ;;
+       pdp11-*)
+               os=-none
+               ;;
+       *-dec | vax-*)
+               os=-ultrix4.2
+               ;;
+       m68*-apollo)
+               os=-domain
+               ;;
+       i386-sun)
+               os=-sunos4.0.2
+               ;;
+       m68000-sun)
+               os=-sunos3
+               # This also exists in the configure program, but was not the
+               # default.
+               # os=-sunos4
+               ;;
+       m68*-cisco)
+               os=-aout
+               ;;
+        mep-*)
+               os=-elf
+               ;;
+       mips*-cisco)
+               os=-elf
+               ;;
+       mips*-*)
+               os=-elf
+               ;;
+       or32-*)
+               os=-coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=-sysv3
+               ;;
+       sparc-* | *-sun)
+               os=-sunos4.1.1
+               ;;
+       *-be)
+               os=-beos
+               ;;
+       *-haiku)
+               os=-haiku
+               ;;
+       *-ibm)
+               os=-aix
+               ;;
+       *-knuth)
+               os=-mmixware
+               ;;
+       *-wec)
+               os=-proelf
+               ;;
+       *-winbond)
+               os=-proelf
+               ;;
+       *-oki)
+               os=-proelf
+               ;;
+       *-hp)
+               os=-hpux
+               ;;
+       *-hitachi)
+               os=-hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=-sysv
+               ;;
+       *-cbm)
+               os=-amigaos
+               ;;
+       *-dg)
+               os=-dgux
+               ;;
+       *-dolphin)
+               os=-sysv3
+               ;;
+       m68k-ccur)
+               os=-rtu
+               ;;
+       m88k-omron*)
+               os=-luna
+               ;;
+       *-next )
+               os=-nextstep
+               ;;
+       *-sequent)
+               os=-ptx
+               ;;
+       *-crds)
+               os=-unos
+               ;;
+       *-ns)
+               os=-genix
+               ;;
+       i370-*)
+               os=-mvs
+               ;;
+       *-next)
+               os=-nextstep3
+               ;;
+       *-gould)
+               os=-sysv
+               ;;
+       *-highlevel)
+               os=-bsd
+               ;;
+       *-encore)
+               os=-bsd
+               ;;
+       *-sgi)
+               os=-irix
+               ;;
+       *-siemens)
+               os=-sysv4
+               ;;
+       *-masscomp)
+               os=-rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=-uxpv
+               ;;
+       *-rom68k)
+               os=-coff
+               ;;
+       *-*bug)
+               os=-coff
+               ;;
+       *-apple)
+               os=-macos
+               ;;
+       *-atari*)
+               os=-mint
+               ;;
+       *)
+               os=-none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+       *-unknown)
+               case $os in
+                       -riscix*)
+                               vendor=acorn
+                               ;;
+                       -sunos*)
+                               vendor=sun
+                               ;;
+                       -cnk*|-aix*)
+                               vendor=ibm
+                               ;;
+                       -beos*)
+                               vendor=be
+                               ;;
+                       -hpux*)
+                               vendor=hp
+                               ;;
+                       -mpeix*)
+                               vendor=hp
+                               ;;
+                       -hiux*)
+                               vendor=hitachi
+                               ;;
+                       -unos*)
+                               vendor=crds
+                               ;;
+                       -dgux*)
+                               vendor=dg
+                               ;;
+                       -luna*)
+                               vendor=omron
+                               ;;
+                       -genix*)
+                               vendor=ns
+                               ;;
+                       -mvs* | -opened*)
+                               vendor=ibm
+                               ;;
+                       -os400*)
+                               vendor=ibm
+                               ;;
+                       -ptx*)
+                               vendor=sequent
+                               ;;
+                       -tpf*)
+                               vendor=ibm
+                               ;;
+                       -vxsim* | -vxworks* | -windiss*)
+                               vendor=wrs
+                               ;;
+                       -aux*)
+                               vendor=apple
+                               ;;
+                       -hms*)
+                               vendor=hitachi
+                               ;;
+                       -mpw* | -macos*)
+                               vendor=apple
+                               ;;
+                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       -vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+               ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/depcomp b/build-aux/depcomp
new file mode 100755 (executable)
index 0000000..df8eea7
--- /dev/null
@@ -0,0 +1,630 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
+# Software Foundation, Inc.
+
+# 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 2, 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/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+   # This is just like msvisualcpp but w/o cygpath translation.
+   # Just convert the backslash-escaped backslashes to single forward
+   # slashes to satisfy depend.m4
+   cygpath_u="sed s,\\\\\\\\,/,g"
+   depmode=msvisualcpp
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> "$depfile"
+    echo >> "$depfile"
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+    # That's a tab and a space in the [].
+    sed -e 's,^.*\.[a-z]*:[     ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+  test "x$dir" = "x$object" && dir=
+  base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add `dependent.h:' lines.
+    sed -ne '2,${
+              s/^ *//
+              s/ \\*$//
+              s/$/:/
+              p
+            }' "$tmpdepfile" >> "$depfile"
+  else
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mechanism is used in libtool 1.4 series to
+      # handle both shared and static libraries in a single compilation.
+      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+      #
+      # With libtool 1.5 this exception was removed, and libtool now
+      # generates 2 separate objects for the 2 libraries.  These two
+      # compilations output dependencies in $dir.libs/$base.o.d and
+      # in $dir$base.o.d.  We have to check for both files, because
+      # one of the two compilations can be disabled.  We should prefer
+      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+       -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::     \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/gendocs.sh b/build-aux/gendocs.sh
new file mode 100755 (executable)
index 0000000..8cab8f6
--- /dev/null
@@ -0,0 +1,375 @@
+#!/bin/sh -e
+# gendocs.sh -- generate a GNU manual in many formats.  This script is
+#   mentioned in maintain.texi.  See the help message below for usage details.
+
+scriptversion=2010-05-04.09
+
+# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Free Software Foundation, Inc.
+#
+# 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/>.
+#
+# Original author: Mohit Agarwal.
+# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
+
+prog=`basename "$0"`
+srcdir=`pwd`
+
+scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
+templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
+
+: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
+: ${MAKEINFO="makeinfo"}
+: ${TEXI2DVI="texi2dvi -t @finalout"}
+: ${DVIPS="dvips"}
+: ${DOCBOOK2HTML="docbook2html"}
+: ${DOCBOOK2PDF="docbook2pdf"}
+: ${DOCBOOK2PS="docbook2ps"}
+: ${DOCBOOK2TXT="docbook2txt"}
+: ${GENDOCS_TEMPLATE_DIR="."}
+: ${TEXI2HTML="texi2html"}
+unset CDPATH
+unset use_texi2html
+
+version="gendocs.sh $scriptversion
+
+Copyright 2009 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
+
+Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
+See the GNU Maintainers document for a more extensive discussion:
+  http://www.gnu.org/prep/maintain_toc.html
+
+Options:
+  -s SRCFILE  read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
+  -o OUTDIR   write files into OUTDIR, instead of manual/.
+  --email ADR use ADR as contact in generated web pages.
+  --docbook   convert to DocBook too (xml, txt, html, pdf and ps).
+  --html ARG  pass indicated ARG to makeinfo or texi2html for HTML targets.
+  --texi2html use texi2html to generate HTML targets.
+  --help      display this help and exit successfully.
+  --version   display version information and exit successfully.
+
+Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
+
+Typical sequence:
+  cd PACKAGESOURCE/doc
+  wget \"$scripturl\"
+  wget \"$templateurl\"
+  $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
+
+Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
+to override).  Move all the new files into your web CVS tree, as
+explained in the Web Pages node of maintain.texi.
+
+Please use the --email ADDRESS option to specify your bug-reporting
+address in the generated HTML pages.
+
+MANUAL-TITLE is included as part of the HTML <title> of the overall
+manual/index.html file.  It should include the name of the package being
+documented.  manual/index.html is created by substitution from the file
+$GENDOCS_TEMPLATE_DIR/gendocs_template.  (Feel free to modify the
+generic template for your own purposes.)
+
+If you have several manuals, you'll need to run this script several
+times with different MANUAL values, specifying a different output
+directory with -o each time.  Then write (by hand) an overall index.html
+with links to them all.
+
+If a manual's Texinfo sources are spread across several directories,
+first copy or symlink all Texinfo sources into a single directory.
+(Part of the script's work is to make a tar.gz of the sources.)
+
+You can set the environment variables MAKEINFO, TEXI2DVI, and DVIPS to
+control the programs that get executed, and GENDOCS_TEMPLATE_DIR to
+control where the gendocs_template file is looked for.  (With --docbook,
+the environment variables DOCBOOK2HTML, DOCBOOK2PDF, DOCBOOK2PS, and
+DOCBOOK2TXT are also respected.)
+
+By default, makeinfo is run in the default (English) locale, since
+that's the language of most Texinfo manuals.  If you happen to have a
+non-English manual and non-English web site, see the SETLANG setting
+in the source.
+
+Email bug reports or enhancement requests to bug-texinfo@gnu.org.
+"
+
+calcsize()
+{
+  size=`ls -ksl $1 | awk '{print $1}'`
+  echo $size
+}
+
+MANUAL_TITLE=
+PACKAGE=
+EMAIL=webmasters@gnu.org  # please override with --email
+htmlarg=
+outdir=manual
+srcfile=
+
+while test $# -gt 0; do
+  case $1 in
+    --email) shift; EMAIL=$1;;
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    -s) shift; srcfile=$1;;
+    -o) shift; outdir=$1;;
+    --docbook) docbook=yes;;
+    --html) shift; htmlarg=$1;;
+    --texi2html) use_texi2html=1;;
+    -*)
+      echo "$0: Unknown option \`$1'." >&2
+      echo "$0: Try \`--help' for more information." >&2
+      exit 1;;
+    *)
+      if test -z "$PACKAGE"; then
+        PACKAGE=$1
+      elif test -z "$MANUAL_TITLE"; then
+        MANUAL_TITLE=$1
+      else
+        echo "$0: extra non-option argument \`$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+# For most of the following, the base name is just $PACKAGE
+base=$PACKAGE
+
+if test -n "$srcfile"; then
+  # but here, we use the basename of $srcfile
+  base=`basename "$srcfile"`
+  case $base in
+    *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
+  esac
+  PACKAGE=$base
+elif test -s "$srcdir/$PACKAGE.texinfo"; then
+  srcfile=$srcdir/$PACKAGE.texinfo
+elif test -s "$srcdir/$PACKAGE.texi"; then
+  srcfile=$srcdir/$PACKAGE.texi
+elif test -s "$srcdir/$PACKAGE.txi"; then
+  srcfile=$srcdir/$PACKAGE.txi
+else
+  echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
+  exit 1
+fi
+
+if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
+  echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
+  echo "$0: it is available from $templateurl." >&2
+  exit 1
+fi
+
+case $outdir in
+  /*) dotdot_outdir="$outdir";;
+  *) dotdot_outdir="../$outdir";;
+esac
+
+echo Generating output formats for $srcfile
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
+echo "Generating info files... ($cmd)"
+eval "$cmd"
+mkdir -p $outdir/
+tar czf $outdir/$PACKAGE.info.tar.gz $PACKAGE.info*
+info_tgz_size=`calcsize $outdir/$PACKAGE.info.tar.gz`
+# do not mv the info files, there's no point in having them available
+# separately on the web.
+
+cmd="${TEXI2DVI} \"$srcfile\""
+echo "Generating dvi ... ($cmd)"
+eval "$cmd"
+
+# now, before we compress dvi:
+echo Generating postscript...
+${DVIPS} $PACKAGE -o
+gzip -f -9 $PACKAGE.ps
+ps_gz_size=`calcsize $PACKAGE.ps.gz`
+mv $PACKAGE.ps.gz $outdir/
+
+# compress/finish dvi:
+gzip -f -9 $PACKAGE.dvi
+dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
+mv $PACKAGE.dvi.gz $outdir/
+
+cmd="${TEXI2DVI} --pdf \"$srcfile\""
+echo "Generating pdf ... ($cmd)"
+eval "$cmd"
+pdf_size=`calcsize $PACKAGE.pdf`
+mv $PACKAGE.pdf $outdir/
+
+cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
+echo "Generating ASCII... ($cmd)"
+eval "$cmd"
+ascii_size=`calcsize $PACKAGE.txt`
+gzip -f -9 -c $PACKAGE.txt >$outdir/$PACKAGE.txt.gz
+ascii_gz_size=`calcsize $outdir/$PACKAGE.txt.gz`
+mv $PACKAGE.txt $outdir/
+
+html_split()
+{
+  opt="--split=$1 $htmlarg --node-files"
+  cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
+  echo "Generating html by $1... ($cmd)"
+  eval "$cmd"
+  split_html_dir=$PACKAGE.html
+  (
+    cd ${split_html_dir} || exit 1
+    ln -sf ${PACKAGE}.html index.html
+    tar -czf $dotdot_outdir/${PACKAGE}.html_$1.tar.gz -- *.html
+  )
+  eval html_$1_tgz_size=`calcsize $outdir/${PACKAGE}.html_$1.tar.gz`
+  rm -f $outdir/html_$1/*.html
+  mkdir -p $outdir/html_$1/
+  mv ${split_html_dir}/*.html $outdir/html_$1/
+  rmdir ${split_html_dir}
+}
+
+if test -z "$use_texi2html"; then
+  opt="--no-split --html -o $PACKAGE.html $htmlarg"
+  cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
+  echo "Generating monolithic html... ($cmd)"
+  rm -rf $PACKAGE.html  # in case a directory is left over
+  eval "$cmd"
+  html_mono_size=`calcsize $PACKAGE.html`
+  gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
+  html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
+  mv $PACKAGE.html $outdir/
+
+  cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\""
+  echo "Generating html by node... ($cmd)"
+  eval "$cmd"
+  split_html_dir=$PACKAGE.html
+  (
+   cd ${split_html_dir} || exit 1
+   tar -czf $dotdot_outdir/${PACKAGE}.html_node.tar.gz -- *.html
+  )
+  html_node_tgz_size=`calcsize $outdir/${PACKAGE}.html_node.tar.gz`
+  rm -f $outdir/html_node/*.html
+  mkdir -p $outdir/html_node/
+  mv ${split_html_dir}/*.html $outdir/html_node/
+  rmdir ${split_html_dir}
+else
+  cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\""
+  echo "Generating monolithic html... ($cmd)"
+  rm -rf $PACKAGE.html  # in case a directory is left over
+  eval "$cmd"
+  html_mono_size=`calcsize $PACKAGE.html`
+  gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
+  html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
+  mv $PACKAGE.html $outdir/
+
+  html_split node
+  html_split chapter
+  html_split section
+fi
+
+echo Making .tar.gz for sources...
+d=`dirname $srcfile`
+srcfiles=`ls $d/*.texinfo $d/*.texi $d/*.txi $d/*.eps 2>/dev/null` || true
+tar cvzfh $outdir/$PACKAGE.texi.tar.gz $srcfiles
+texi_tgz_size=`calcsize $outdir/$PACKAGE.texi.tar.gz`
+
+if test -n "$docbook"; then
+  cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml"
+  echo "Generating docbook XML... ($cmd)"
+  eval "$cmd"
+  docbook_xml_size=`calcsize $PACKAGE-db.xml`
+  gzip -f -9 -c $PACKAGE-db.xml >$outdir/$PACKAGE-db.xml.gz
+  docbook_xml_gz_size=`calcsize $outdir/$PACKAGE-db.xml.gz`
+  mv $PACKAGE-db.xml $outdir/
+
+  cmd="${DOCBOOK2HTML} -o $split_html_db_dir ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook HTML... ($cmd)"
+  eval "$cmd"
+  split_html_db_dir=html_node_db
+  (
+    cd ${split_html_db_dir} || exit 1
+    tar -czf $dotdot_outdir/${PACKAGE}.html_node_db.tar.gz -- *.html
+  )
+  html_node_db_tgz_size=`calcsize $outdir/${PACKAGE}.html_node_db.tar.gz`
+  rm -f $outdir/html_node_db/*.html
+  mkdir -p $outdir/html_node_db
+  mv ${split_html_db_dir}/*.html $outdir/html_node_db/
+  rmdir ${split_html_db_dir}
+
+  cmd="${DOCBOOK2TXT} ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook ASCII... ($cmd)"
+  eval "$cmd"
+  docbook_ascii_size=`calcsize $PACKAGE-db.txt`
+  mv $PACKAGE-db.txt $outdir/
+
+  cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook PS... ($cmd)"
+  eval "$cmd"
+  gzip -f -9 -c $PACKAGE-db.ps >$outdir/$PACKAGE-db.ps.gz
+  docbook_ps_gz_size=`calcsize $outdir/$PACKAGE-db.ps.gz`
+  mv $PACKAGE-db.ps $outdir/
+
+  cmd="${DOCBOOK2PDF} ${outdir}/$PACKAGE-db.xml"
+  echo "Generating docbook PDF... ($cmd)"
+  eval "$cmd"
+  docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
+  mv $PACKAGE-db.pdf $outdir/
+fi
+
+echo "Writing index file..."
+if test -z "$use_texi2html"; then
+   CONDS="/%%IF  *HTML_SECTION%%/,/%%ENDIF  *HTML_SECTION%%/d;\
+          /%%IF  *HTML_CHAPTER%%/,/%%ENDIF  *HTML_CHAPTER%%/d"
+else
+   CONDS="/%%ENDIF.*%%/d;/%%IF  *HTML_SECTION%%/d;/%%IF  *HTML_CHAPTER%%/d"
+fi
+curdate=`$SETLANG date '+%B %d, %Y'`
+sed \
+   -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
+   -e "s!%%EMAIL%%!$EMAIL!g" \
+   -e "s!%%PACKAGE%%!$PACKAGE!g" \
+   -e "s!%%DATE%%!$curdate!g" \
+   -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
+   -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
+   -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
+   -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
+   -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
+   -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
+   -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
+   -e "s!%%PDF_SIZE%%!$pdf_size!g" \
+   -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
+   -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
+   -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
+   -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
+   -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
+   -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
+   -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
+   -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
+   -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
+   -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
+   -e "s,%%SCRIPTURL%%,$scripturl,g" \
+   -e "s!%%SCRIPTNAME%%!$prog!g" \
+   -e "$CONDS" \
+$GENDOCS_TEMPLATE_DIR/gendocs_template >$outdir/index.html
+
+echo "Done, see $outdir/ subdirectory for new files."
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755 (executable)
index 0000000..6781b98
--- /dev/null
@@ -0,0 +1,520 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2009-04-28.21; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" ""       $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+  doit_exec=exec
+else
+  doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+  test "$posix_glob" != "?" || {
+    if (set -f) 2>/dev/null; then
+      posix_glob=
+    else
+      posix_glob=:
+    fi
+  }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+       shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+       case $mode in
+         *' '* | *'    '* | *'
+'*       | *'*'* | *'?'* | *'['*)
+           echo "$0: invalid mode: $mode" >&2
+           exit 1;;
+       esac
+       shift;;
+
+    -o) chowncmd="$chownprog $2"
+       shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t) dst_arg=$2
+       shift;;
+
+    -T) no_target_directory=true;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --)        shift
+       break;;
+
+    -*)        echo "$0: invalid option: $1" >&2
+       exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  trap '(exit $?); exit' 1 2 13 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+       u_plus_rw=
+      else
+       u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dst_arg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dst_arg: Is a directory" >&2
+       exit 1
+      fi
+      dstdir=$dst
+      dst=$dstdir/`basename "$src"`
+      dstdir_status=0
+    else
+      # Prefer dirname, but fall back on a substitute if dirname fails.
+      dstdir=`
+       (dirname "$dst") 2>/dev/null ||
+       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+            X"$dst" : 'X\(//\)[^/]' \| \
+            X"$dst" : 'X\(//\)$' \| \
+            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+       echo X"$dst" |
+           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)[^/].*/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\/\)$/{
+                  s//\1/
+                  q
+                }
+                /^X\(\/\).*/{
+                  s//\1/
+                  q
+                }
+                s/.*/./; q'
+      `
+
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+       # Create intermediate dirs using mode 755 as modified by the umask.
+       # This is like FreeBSD 'install' as of 1997-10-28.
+       umask=`umask`
+       case $stripcmd.$umask in
+         # Optimize common cases.
+         *[2367][2367]) mkdir_umask=$umask;;
+         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+         *[0-7])
+           mkdir_umask=`expr $umask + 22 \
+             - $umask % 100 % 40 + $umask % 20 \
+             - $umask % 10 % 4 + $umask % 2
+           `;;
+         *) mkdir_umask=$umask,go-w;;
+       esac
+
+       # With -d, create the new directory with the user-specified mode.
+       # Otherwise, rely on $mkdir_umask.
+       if test -n "$dir_arg"; then
+         mkdir_mode=-m$mode
+       else
+         mkdir_mode=
+       fi
+
+       posix_mkdir=false
+       case $umask in
+         *[123567][0-7][0-7])
+           # POSIX mkdir -p sets u+wx bits regardless of umask, which
+           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+           ;;
+         *)
+           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+           if (umask $mkdir_umask &&
+               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+           then
+             if test -z "$dir_arg" || {
+                  # Check for POSIX incompatibilities with -m.
+                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                  # other-writeable bit of parent directory when it shouldn't.
+                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                  case $ls_ld_tmpdir in
+                    d????-?r-*) different_mode=700;;
+                    d????-?--*) different_mode=755;;
+                    *) false;;
+                  esac &&
+                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                  }
+                }
+             then posix_mkdir=:
+             fi
+             rmdir "$tmpdir/d" "$tmpdir"
+           else
+             # Remove any dirs left behind by ancient mkdir implementations.
+             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+           fi
+           trap '' 0;;
+       esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+       umask $mkdir_umask &&
+       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+       /*) prefix='/';;
+       -*) prefix='./';;
+       *)  prefix='';;
+      esac
+
+      eval "$initialize_posix_glob"
+
+      oIFS=$IFS
+      IFS=/
+      $posix_glob set -f
+      set fnord $dstdir
+      shift
+      $posix_glob set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+       test -z "$d" && continue
+
+       prefix=$prefix$d
+       if test -d "$prefix"; then
+         prefixes=
+       else
+         if $posix_mkdir; then
+           (umask=$mkdir_umask &&
+            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+           # Don't fail if two instances are running concurrently.
+           test -d "$prefix" || exit 1
+         else
+           case $prefix in
+             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+             *) qprefix=$prefix;;
+           esac
+           prefixes="$prefixes '$qprefix'"
+         fi
+       fi
+       prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+       # Don't fail if two instances are running concurrently.
+       (umask $mkdir_umask &&
+        eval "\$doit_exec \$mkdirprog $prefixes") ||
+         test -d "$dstdir" || exit 1
+       obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+       eval "$initialize_posix_glob" &&
+       $posix_glob set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       $posix_glob set +f &&
+
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+       # Now remove or move aside any old file at destination location.
+       # We try this two ways since rm can't unlink itself on some
+       # systems and the destination file might be busy for other
+       # reasons.  In this case, the final cleanup might fail but the new
+       # file should still install successfully.
+       {
+         test ! -f "$dst" ||
+         $doit $rmcmd -f "$dst" 2>/dev/null ||
+         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+         } ||
+         { echo "$0: cannot unlink or rename $dst" >&2
+           (exit 1); exit 1
+         }
+       } &&
+
+       # Now rename the file to the real destination.
+       $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
new file mode 100755 (executable)
index 0000000..d88da2c
--- /dev/null
@@ -0,0 +1,8413 @@
+# Generated from ltmain.m4sh.
+
+# ltmain.sh (GNU libtool) 2.2.6b
+# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool 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 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html,
+# or obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+# Usage: $progname [OPTION]... [MODE-ARG]...
+#
+# Provide generalized library-building support services.
+#
+#     --config             show all configuration variables
+#     --debug              enable verbose shell tracing
+# -n, --dry-run            display commands without modifying any files
+#     --features           display basic configuration information and exit
+#     --mode=MODE          use operation mode MODE
+#     --preserve-dup-deps  don't remove duplicate dependency libraries
+#     --quiet, --silent    don't print informational messages
+#     --tag=TAG            use configuration variables from tag TAG
+# -v, --verbose            print informational messages (default)
+#     --version            print version information
+# -h, --help               print short or long help message
+#
+# MODE must be one of the following:
+#
+#       clean              remove files from the build directory
+#       compile            compile a source file into a libtool object
+#       execute            automatically set library path, then run a program
+#       finish             complete the installation of libtool libraries
+#       install            install libraries or executables
+#       link               create a library or an executable
+#       uninstall          remove libraries from an installed directory
+#
+# MODE-ARGS vary depending on the MODE.
+# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
+#
+# When reporting a bug, please describe a test case to reproduce it and
+# include the following information:
+#
+#       host-triplet:  $host
+#       shell:         $SHELL
+#       compiler:              $LTCC
+#       compiler flags:                $LTCFLAGS
+#       linker:                $LD (gnu? $with_gnu_ld)
+#       $progname:             (GNU libtool) 2.2.6b Debian-2.2.6b-2
+#       automake:              $automake_version
+#       autoconf:              $autoconf_version
+#
+# Report bugs to <bug-libtool@gnu.org>.
+
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION="2.2.6b Debian-2.2.6b-2"
+TIMESTAMP=""
+package_revision=1.3017
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# NLS nuisances: We save the old values to restore during execute mode.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+lt_user_locale=
+lt_safe_locale=
+for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test \"\${$lt_var+set}\" = set; then
+          save_$lt_var=\$$lt_var
+          $lt_var=C
+         export $lt_var
+         lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
+         lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
+       fi"
+done
+
+$lt_unset CDPATH
+
+
+
+
+
+: ${CP="cp -f"}
+: ${ECHO="echo"}
+: ${EGREP="/bin/grep -E"}
+: ${FGREP="/bin/grep -F"}
+: ${GREP="/bin/grep"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SED="/bin/sed"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+: ${Xsed="$SED -e 1s/^X//"}
+
+# Global variables:
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77     # $? = 77 is used to indicate a skipped test to automake.
+
+exit_status=$EXIT_SUCCESS
+
+# Make sure IFS has a sensible default
+lt_nl='
+'
+IFS="  $lt_nl"
+
+dirname="s,/[^/]*$,,"
+basename="s,^.*/,,"
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+# Generated shell functions inserted here.
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath="$0"
+
+# The name of this program:
+# In the unlikely event $progname began with a '-', it would play havoc with
+# func_echo (imagine progname=-n), so we prepend ./ in that case:
+func_dirname_and_basename "$progpath"
+progname=$func_basename_result
+case $progname in
+  -*) progname=./$progname ;;
+esac
+
+# Make sure we have an absolute path for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=$func_dirname_result
+     progdir=`cd "$progdir" && pwd`
+     progpath="$progdir/$progname"
+     ;;
+  *)
+     save_IFS="$IFS"
+     IFS=:
+     for progdir in $PATH; do
+       IFS="$save_IFS"
+       test -x "$progdir/$progname" && break
+     done
+     IFS="$save_IFS"
+     test -n "$progdir" || progdir=`pwd`
+     progpath="$progdir/$progname"
+     ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed="${SED}"' -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Re-`\' parameter expansions in output of double_quote_subst that were
+# `\'-ed in input to the same.  If an odd number of `\' preceded a '$'
+# in input to double_quote_subst, that '$' was protected from expansion.
+# Since each input `\' is now two `\'s, look for any number of runs of
+# four `\'s followed by two `\'s and then a '$'.  `\' that '$'.
+bs='\\'
+bs2='\\\\'
+bs4='\\\\\\\\'
+dollar='\$'
+sed_double_backslash="\
+  s/$bs4/&\\
+/g
+  s/^$bs2$dollar/$bs&/
+  s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
+  s/\n//g"
+
+# Standard options:
+opt_dry_run=false
+opt_help=false
+opt_quiet=false
+opt_verbose=false
+opt_warning=:
+
+# func_echo arg...
+# Echo program name prefixed message, along with the current mode
+# name if it has been set yet.
+func_echo ()
+{
+    $ECHO "$progname${mode+: }$mode: $*"
+}
+
+# func_verbose arg...
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $opt_verbose && func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+# func_error arg...
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
+}
+
+# func_warning arg...
+# Echo program name prefixed warning message to standard error.
+func_warning ()
+{
+    $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
+
+    # bash bug again:
+    :
+}
+
+# func_fatal_error arg...
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+# func_fatal_help arg...
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    func_error ${1+"$@"}
+    func_fatal_error "$help"
+}
+help="Try \`$progname --help' for more information."  ## default
+
+
+# func_grep expression filename
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_mkdir_p directory-path
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    my_directory_path="$1"
+    my_dir_list=
+
+    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+
+      # Protect directory names starting with `-'
+      case $my_directory_path in
+        -*) my_directory_path="./$my_directory_path" ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$my_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+       # list incase some portion of path contains whitespace.
+        my_dir_list="$my_directory_path:$my_dir_list"
+
+        # If the last portion added has no slash in it, the list is done
+        case $my_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
+      done
+      my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
+
+      save_mkdir_p_IFS="$IFS"; IFS=':'
+      for my_dir in $my_dir_list; do
+       IFS="$save_mkdir_p_IFS"
+        # mkdir can fail with a `File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$my_dir" 2>/dev/null || :
+      done
+      IFS="$save_mkdir_p_IFS"
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$my_directory_path" || \
+        func_fatal_error "Failed to create \`$1'"
+    fi
+}
+
+
+# func_mktempdir [string]
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, STRING is the basename for that directory.
+func_mktempdir ()
+{
+    my_template="${TMPDIR-/tmp}/${1-$progname}"
+
+    if test "$opt_dry_run" = ":"; then
+      # Return a directory name, but don't create it in dry-run mode
+      my_tmpdir="${my_template}-$$"
+    else
+
+      # If mktemp works, use that first and foremost
+      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$my_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        my_tmpdir="${my_template}-${RANDOM-0}$$"
+
+        save_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$my_tmpdir"
+        umask $save_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$my_tmpdir" || \
+        func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
+    fi
+
+    $ECHO "X$my_tmpdir" | $Xsed
+}
+
+
+# func_quote_for_eval arg
+# Aesthetically quote ARG to be evaled later.
+# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
+# is double-quoted, suitable for a subsequent eval, whereas
+# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
+# which are still active within double quotes backslashified.
+func_quote_for_eval ()
+{
+    case $1 in
+      *[\\\`\"\$]*)
+       func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
+      *)
+        func_quote_for_eval_unquoted_result="$1" ;;
+    esac
+
+    case $func_quote_for_eval_unquoted_result in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting, command substitution and and variable
+      # expansion for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
+        ;;
+      *)
+        func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
+    esac
+}
+
+
+# func_quote_for_expand arg
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    case $1 in
+      *[\\\`\"]*)
+       my_arg=`$ECHO "X$1" | $Xsed \
+           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        my_arg="$1" ;;
+    esac
+
+    case $my_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        my_arg="\"$my_arg\""
+        ;;
+    esac
+
+    func_quote_for_expand_result="$my_arg"
+}
+
+
+# func_show_eval cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$my_cmd"
+      my_status=$?
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+# func_show_eval_locale cmd [fail_exp]
+# Unless opt_silent is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    my_cmd="$1"
+    my_fail_exp="${2-:}"
+
+    ${opt_silent-false} || {
+      func_quote_for_expand "$my_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    if ${opt_dry_run-false}; then :; else
+      eval "$lt_user_locale
+           $my_cmd"
+      my_status=$?
+      eval "$lt_safe_locale"
+      if test "$my_status" -eq 0; then :; else
+       eval "(exit $my_status); $my_fail_exp"
+      fi
+    fi
+}
+
+
+
+
+
+# func_version
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
+        s/^# //
+       s/^# *$//
+        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
+        p
+     }' < "$progpath"
+     exit $?
+}
+
+# func_usage
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $SED -n '/^# Usage:/,/# -h/ {
+        s/^# //
+       s/^# *$//
+       s/\$progname/'$progname'/
+       p
+    }' < "$progpath"
+    $ECHO
+    $ECHO "run \`$progname --help | more' for full usage"
+    exit $?
+}
+
+# func_help
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $SED -n '/^# Usage:/,/# Report bugs to/ {
+        s/^# //
+       s/^# *$//
+       s*\$progname*'$progname'*
+       s*\$host*'"$host"'*
+       s*\$SHELL*'"$SHELL"'*
+       s*\$LTCC*'"$LTCC"'*
+       s*\$LTCFLAGS*'"$LTCFLAGS"'*
+       s*\$LD*'"$LD"'*
+       s/\$with_gnu_ld/'"$with_gnu_ld"'/
+       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       p
+     }' < "$progpath"
+    exit $?
+}
+
+# func_missing_arg argname
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    func_error "missing argument for $1"
+    exit_cmd=exit
+}
+
+exit_cmd=:
+
+
+
+
+
+# Check that we have a working $ECHO.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell, and then maybe $ECHO will work.
+  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit $EXIT_SUCCESS
+fi
+
+magic="%%%MAGIC variable%%%"
+magic_exe="%%%MAGIC EXE variable%%%"
+
+# Global variables.
+# $mode is unset
+nonopt=
+execute_dlfiles=
+preserve_args=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+extracted_archives=
+extracted_serial=0
+
+opt_dry_run=false
+opt_duplicate_deps=false
+opt_silent=false
+opt_debug=:
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+# func_fatal_configuration arg...
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func_error ${1+"$@"}
+    func_error "See the $PACKAGE documentation for more information."
+    func_fatal_error "Fatal configuration error."
+}
+
+
+# func_config
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+# func_features
+# Display the features supported by this script.
+func_features ()
+{
+    $ECHO "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      $ECHO "enable shared libraries"
+    else
+      $ECHO "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      $ECHO "enable static libraries"
+    else
+      $ECHO "disable static libraries"
+    fi
+
+    exit $?
+}
+
+# func_enable_tag tagname
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+  # Global variable:
+  tagname="$1"
+
+  re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+  re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+  sed_extractcf="/$re_begincf/,/$re_endcf/p"
+
+  # Validate tagname.
+  case $tagname in
+    *[!-_A-Za-z0-9,/]*)
+      func_fatal_error "invalid tag name: $tagname"
+      ;;
+  esac
+
+  # Don't test for the "default" C tag, as we know it's
+  # there but not specially marked.
+  case $tagname in
+    CC) ;;
+    *)
+      if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+       taglist="$taglist $tagname"
+
+       # Evaluate the configuration.  Be careful to quote the path
+       # and the sed script, to avoid splitting on whitespace, but
+       # also don't use non-portable quotes within backquotes within
+       # quotes we have to do it in 2 steps:
+       extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+       eval "$extractedcf"
+      else
+       func_error "ignoring unknown tag $tagname"
+      fi
+      ;;
+  esac
+}
+
+# Parse options once, thoroughly.  This comes as soon as possible in
+# the script to make things like `libtool --version' happen quickly.
+{
+
+  # Shorthand for --mode=foo, only valid as the first argument
+  case $1 in
+  clean|clea|cle|cl)
+    shift; set dummy --mode clean ${1+"$@"}; shift
+    ;;
+  compile|compil|compi|comp|com|co|c)
+    shift; set dummy --mode compile ${1+"$@"}; shift
+    ;;
+  execute|execut|execu|exec|exe|ex|e)
+    shift; set dummy --mode execute ${1+"$@"}; shift
+    ;;
+  finish|finis|fini|fin|fi|f)
+    shift; set dummy --mode finish ${1+"$@"}; shift
+    ;;
+  install|instal|insta|inst|ins|in|i)
+    shift; set dummy --mode install ${1+"$@"}; shift
+    ;;
+  link|lin|li|l)
+    shift; set dummy --mode link ${1+"$@"}; shift
+    ;;
+  uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+    shift; set dummy --mode uninstall ${1+"$@"}; shift
+    ;;
+  esac
+
+  # Parse non-mode specific arguments:
+  while test "$#" -gt 0; do
+    opt="$1"
+    shift
+
+    case $opt in
+      --config)                func_config                                     ;;
+
+      --debug)         preserve_args="$preserve_args $opt"
+                       func_echo "enabling shell trace mode"
+                       opt_debug='set -x'
+                       $opt_debug
+                       ;;
+
+      -dlopen)         test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       execute_dlfiles="$execute_dlfiles $1"
+                       shift
+                       ;;
+
+      --dry-run | -n)  opt_dry_run=:                                   ;;
+      --features)       func_features                                  ;;
+      --finish)                mode="finish"                                   ;;
+
+      --mode)          test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       case $1 in
+                         # Valid mode arguments:
+                         clean)        ;;
+                         compile)      ;;
+                         execute)      ;;
+                         finish)       ;;
+                         install)      ;;
+                         link)         ;;
+                         relink)       ;;
+                         uninstall)    ;;
+
+                         # Catch anything else as an error
+                         *) func_error "invalid argument for $opt"
+                            exit_cmd=exit
+                            break
+                            ;;
+                       esac
+
+                       mode="$1"
+                       shift
+                       ;;
+
+      --preserve-dup-deps)
+                       opt_duplicate_deps=:                            ;;
+
+      --quiet|--silent)        preserve_args="$preserve_args $opt"
+                       opt_silent=:
+                       ;;
+
+      --verbose| -v)   preserve_args="$preserve_args $opt"
+                       opt_silent=false
+                       ;;
+
+      --tag)           test "$#" -eq 0 && func_missing_arg "$opt" && break
+                       preserve_args="$preserve_args $opt $1"
+                       func_enable_tag "$1"    # tagname is set here
+                       shift
+                       ;;
+
+      # Separate optargs to long options:
+      -dlopen=*|--mode=*|--tag=*)
+                       func_opt_split "$opt"
+                       set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
+                       shift
+                       ;;
+
+      -\?|-h)          func_usage                                      ;;
+      --help)          opt_help=:                                      ;;
+      --version)       func_version                                    ;;
+
+      -*)              func_fatal_help "unrecognized option \`$opt'"   ;;
+
+      *)               nonopt="$opt"
+                       break
+                       ;;
+    esac
+  done
+
+
+  case $host in
+    *cygwin* | *mingw* | *pw32* | *cegcc*)
+      # don't eliminate duplications in $postdeps and $predeps
+      opt_duplicate_compiler_generated_deps=:
+      ;;
+    *)
+      opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
+      ;;
+  esac
+
+  # Having warned about all mis-specified options, bail out if
+  # anything was wrong.
+  $exit_cmd $EXIT_FAILURE
+}
+
+# func_check_version_match
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+  if test "$package_revision" != "$macro_revision"; then
+    if test "$VERSION" != "$macro_version"; then
+      if test -z "$macro_version"; then
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+      fi
+    else
+      cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+    fi
+
+    exit $EXIT_MISMATCH
+  fi
+}
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+$opt_help || {
+  # Sanity checks first:
+  func_check_version_match
+
+  if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+    func_fatal_configuration "not configured to build any kind of library"
+  fi
+
+  test -z "$mode" && func_fatal_error "error: you must specify a MODE."
+
+
+  # Darwin sucks
+  eval std_shrext=\"$shrext_cmds\"
+
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    func_error "unrecognized option \`-dlopen'"
+    $ECHO "$help" 1>&2
+    exit $EXIT_FAILURE
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$progname --help --mode=$mode' for more information."
+}
+
+
+# func_lalib_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null \
+        | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool `.la' library or `.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if `file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+       for lalib_p_l in 1 2 3 4
+       do
+           read lalib_p_line
+           case "$lalib_p_line" in
+               \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+           esac
+       done
+       exec 0<&5 5<&-
+    fi
+    test "$lalib_p" = yes
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    func_lalib_p "$1"
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_ltwrapper_scriptname_result=""
+    if func_ltwrapper_executable_p "$1"; then
+       func_dirname_and_basename "$1" "" "."
+       func_stripname '' '.exe' "$func_basename_result"
+       func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    fi
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $opt_debug
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$save_ifs
+      eval cmd=\"$cmd\"
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# `FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $opt_debug
+    case $1 in
+    */* | *\\*)        . "$1" ;;
+    *)         . "./$1" ;;
+    esac
+}
+
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $opt_debug
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+        func_quote_for_eval "$arg"
+       CC_quoted="$CC_quoted $func_quote_for_eval_result"
+      done
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+       for z in $available_tags; do
+         if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+           # Evaluate the configuration.
+           eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+           CC_quoted=
+           for arg in $CC; do
+             # Double-quote args containing other shell metacharacters.
+             func_quote_for_eval "$arg"
+             CC_quoted="$CC_quoted $func_quote_for_eval_result"
+           done
+           case "$@ " in
+             " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
+             # The compiler in the base compile command matches
+             # the one in the tagged configuration.
+             # Assume this is the tagged configuration we want.
+             tagname=$z
+             break
+             ;;
+           esac
+         fi
+       done
+       # If $tagname still isn't set, then no tagged configuration
+       # was found and let the user know that the "--tag" command
+       # line option must be used.
+       if test -z "$tagname"; then
+         func_echo "unable to infer tagged configuration"
+         func_fatal_error "specify a tag with \`--tag'"
+#      else
+#        func_verbose "using $tagname tagged configuration"
+       fi
+       ;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=${1}
+    if test "$build_libtool_libs" = yes; then
+      write_lobj=\'${2}\'
+    else
+      write_lobj=none
+    fi
+
+    if test "$build_old_libs" = yes; then
+      write_oldobj=\'${3}\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "${write_libobj}"
+    }
+}
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $opt_debug
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+       # do not "continue".  Instead, add this to base_compile
+       lastarg="$arg"
+       arg_mode=normal
+       ;;
+
+      target )
+       libobj="$arg"
+       arg_mode=normal
+       continue
+       ;;
+
+      normal )
+       # Accept any command-line options.
+       case $arg in
+       -o)
+         test -n "$libobj" && \
+           func_fatal_error "you cannot specify \`-o' more than once"
+         arg_mode=target
+         continue
+         ;;
+
+       -pie | -fpie | -fPIE)
+          pie_flag="$pie_flag $arg"
+         continue
+         ;;
+
+       -shared | -static | -prefer-pic | -prefer-non-pic)
+         later="$later $arg"
+         continue
+         ;;
+
+       -no-suppress)
+         suppress_opt=no
+         continue
+         ;;
+
+       -Xcompiler)
+         arg_mode=arg  #  the next one goes into the "base_compile" arg list
+         continue      #  The current "srcfile" will either be retained or
+         ;;            #  replaced later.  I would guess that would be a bug.
+
+       -Wc,*)
+         func_stripname '-Wc,' '' "$arg"
+         args=$func_stripname_result
+         lastarg=
+         save_ifs="$IFS"; IFS=','
+         for arg in $args; do
+           IFS="$save_ifs"
+           func_quote_for_eval "$arg"
+           lastarg="$lastarg $func_quote_for_eval_result"
+         done
+         IFS="$save_ifs"
+         func_stripname ' ' '' "$lastarg"
+         lastarg=$func_stripname_result
+
+         # Add the arguments to base_compile.
+         base_compile="$base_compile $lastarg"
+         continue
+         ;;
+
+       *)
+         # Accept the current argument as the source file.
+         # The previous "srcfile" becomes the current argument.
+         #
+         lastarg="$srcfile"
+         srcfile="$arg"
+         ;;
+       esac  #  case $arg
+       ;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_quote_for_eval "$lastarg"
+      base_compile="$base_compile $func_quote_for_eval_result"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with \`-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+       func_basename "$srcfile"
+       libobj="$func_basename_result"
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.obj | *.sx)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       continue
+       ;;
+
+      -static)
+       build_libtool_libs=no
+       build_old_libs=yes
+       continue
+       ;;
+
+      -prefer-pic)
+       pic_mode=yes
+       continue
+       ;;
+
+      -prefer-non-pic)
+       pic_mode=no
+       continue
+       ;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
+      && func_warning "libobj name \`$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname="$func_basename_result"
+    xdir="$func_dirname_result"
+    lobj=${xdir}$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+       func_echo "Waiting for $lockfile to be removed"
+       sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+       $ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+      removelist="$removelist $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    removelist="$removelist $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+       command="$base_compile $qsrcfile $pic_flag"
+      else
+       # Don't build PIC code
+       command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+       # Place PIC objects in $objdir
+       command="$command -o $lobj"
+      fi
+
+      func_show_eval_locale "$command" \
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+       func_show_eval '$MV "$output_obj" "$lobj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test "$suppress_opt" = yes; then
+       suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+       # Don't build PIC code
+       command="$base_compile $qsrcfile$pie_flag"
+      else
+       command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test "$compiler_c_o" = yes; then
+       command="$command -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test "$need_locks" = warn &&
+        test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+       $ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+       $opt_dry_run || $RM $removelist
+       exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+       func_show_eval '$MV "$output_obj" "$obj"' \
+         'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test "$need_locks" != no; then
+       removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+test "$mode" = compile && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -shared           do not build a \`.o' file suitable for static linking
+  -static           only build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  Use a list of object files found in FILE to specify objects
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode \`$mode'"
+        ;;
+    esac
+
+    $ECHO
+    $ECHO "Try \`$progname --help' for more information about other modes."
+
+    exit $?
+}
+
+  # Now that we've collected a possible --mode arg, show help if necessary
+  $opt_help && func_mode_help
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $opt_debug
+    # The first argument is the command name.
+    cmd="$nonopt"
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      test -f "$file" \
+       || func_fatal_help "\`$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$lib' is not a valid libtool archive"
+
+       # Read the libtool library.
+       dlname=
+       library_names=
+       func_source "$file"
+
+       # Skip this library if it cannot be dlopened.
+       if test -z "$dlname"; then
+         # Warn if it was a shared library.
+         test -n "$library_names" && \
+           func_warning "\`$file' was not linked with \`-export-dynamic'"
+         continue
+       fi
+
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+
+       if test -f "$dir/$objdir/$dlname"; then
+         dir="$dir/$objdir"
+       else
+         if test ! -f "$dir/$dlname"; then
+           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+         fi
+       fi
+       ;;
+
+      *.lo)
+       # Just add the directory containing the .lo file.
+       func_dirname "$file" "" "."
+       dir="$func_dirname_result"
+       ;;
+
+      *)
+       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       continue
+       ;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+       eval "$shlibpath_var=\"\$dir\""
+      else
+       eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+       # Do a test to see if this is really a libtool program.
+       if func_ltwrapper_script_p "$file"; then
+         func_source "$file"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       elif func_ltwrapper_executable_p "$file"; then
+         func_ltwrapper_scriptname "$file"
+         func_source "$func_ltwrapper_scriptname_result"
+         # Transform arg to wrapped name.
+         file="$progdir/$program"
+       fi
+       ;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_quote_for_eval "$file"
+      args="$args $func_quote_for_eval_result"
+    done
+
+    if test "X$opt_dry_run" = Xfalse; then
+      if test -n "$shlibpath_var"; then
+       # Export the shlibpath_var.
+       eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+       eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+             else
+               $lt_unset $lt_var
+             fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd="\$cmd$args"
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+       eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+       $ECHO "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = execute && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $opt_debug
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+       libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+       if test -n "$finish_cmds"; then
+         # Do each command in the finish commands.
+         func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+       fi
+       if test -n "$finish_eval"; then
+         # Do the single finish_eval.
+         eval cmds=\"$finish_eval\"
+         $opt_dry_run || eval "$cmds" || admincmds="$admincmds
+       $cmds"
+       fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_silent && exit $EXIT_SUCCESS
+
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    $ECHO "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      $ECHO "   $libdir"
+    done
+    $ECHO
+    $ECHO "If you ever happen to want to link against installed libraries"
+    $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
+    $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    $ECHO "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      $ECHO "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      $ECHO "   - add LIBDIR to the \`$runpath_var' environment variable"
+      $ECHO "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      $ECHO "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      $ECHO "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      $ECHO "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    $ECHO
+
+    $ECHO "See any operating system documentation about shared libraries for"
+    case $host in
+      solaris2.[6789]|solaris2.1[0-9])
+        $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+       $ECHO "pages."
+       ;;
+      *)
+        $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
+        ;;
+    esac
+    $ECHO "X----------------------------------------------------------------------" | $Xsed
+    exit $EXIT_SUCCESS
+}
+
+test "$mode" = finish && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $opt_debug
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    install_prog="$install_prog$func_quote_for_eval_result"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+       files="$files $dest"
+       dest=$arg
+       continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f)
+       case " $install_prog " in
+       *[\\\ /]cp\ *) ;;
+       *) prev=$arg ;;
+       esac
+       ;;
+      -g | -m | -o)
+       prev=$arg
+       ;;
+      -s)
+       stripme=" -s"
+       continue
+       ;;
+      -*)
+       ;;
+      *)
+       # If the previous option needed an argument, then skip it.
+       if test -n "$prev"; then
+         prev=
+       else
+         dest=$arg
+         continue
+       fi
+       ;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      install_prog="$install_prog $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prev' option requires an argument"
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+       func_fatal_help "no file or destination specified"
+      else
+       func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir="$func_dirname_result"
+      destname="$func_basename_result"
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+       func_fatal_help "\`$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+       case $file in
+       *.lo) ;;
+       *)
+         func_fatal_help "\`$destdir' must be an absolute directory name"
+         ;;
+       esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+       # Do the static libraries later.
+       staticlibs="$staticlibs $file"
+       ;;
+
+      *.la)
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$file" \
+         || func_fatal_help "\`$file' is not a valid libtool archive"
+
+       library_names=
+       old_library=
+       relink_command=
+       func_source "$file"
+
+       # Add the libdir to current_libdirs if it is the destination.
+       if test "X$destdir" = "X$libdir"; then
+         case "$current_libdirs " in
+         *" $libdir "*) ;;
+         *) current_libdirs="$current_libdirs $libdir" ;;
+         esac
+       else
+         # Note the libdir as a future libdir.
+         case "$future_libdirs " in
+         *" $libdir "*) ;;
+         *) future_libdirs="$future_libdirs $libdir" ;;
+         esac
+       fi
+
+       func_dirname "$file" "/" ""
+       dir="$func_dirname_result"
+       dir="$dir$objdir"
+
+       if test -n "$relink_command"; then
+         # Determine the prefix the user has applied to our future dir.
+         inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
+
+         # Don't allow the user to place us outside of our expected
+         # location b/c this prevents finding dependent libraries that
+         # are installed to the same prefix.
+         # At present, this check doesn't affect windows .dll's that
+         # are installed into $libdir/../bin (currently, that works fine)
+         # but it's something to keep an eye on.
+         test "$inst_prefix_dir" = "$destdir" && \
+           func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
+
+         if test -n "$inst_prefix_dir"; then
+           # Stick the inst_prefix_dir data into the link command.
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+         else
+           relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
+         fi
+
+         func_warning "relinking \`$file'"
+         func_show_eval "$relink_command" \
+           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+       fi
+
+       # See the names of the shared library.
+       set dummy $library_names; shift
+       if test -n "$1"; then
+         realname="$1"
+         shift
+
+         srcname="$realname"
+         test -n "$relink_command" && srcname="$realname"T
+
+         # Install the shared library and build the symlinks.
+         func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
+             'exit $?'
+         tstripme="$stripme"
+         case $host_os in
+         cygwin* | mingw* | pw32* | cegcc*)
+           case $realname in
+           *.dll.a)
+             tstripme=""
+             ;;
+           esac
+           ;;
+         esac
+         if test -n "$tstripme" && test -n "$striplib"; then
+           func_show_eval "$striplib $destdir/$realname" 'exit $?'
+         fi
+
+         if test "$#" -gt 0; then
+           # Delete the old symlinks, and create new ones.
+           # Try `ln -sf' first, because the `ln' binary might depend on
+           # the symlink we replace!  Solaris /bin/ln does not understand -f,
+           # so we also need to try rm && ln -s.
+           for linkname
+           do
+             test "$linkname" != "$realname" \
+               && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+           done
+         fi
+
+         # Do each command in the postinstall commands.
+         lib="$destdir/$realname"
+         func_execute_cmds "$postinstall_cmds" 'exit $?'
+       fi
+
+       # Install the pseudo-library for information purposes.
+       func_basename "$file"
+       name="$func_basename_result"
+       instname="$dir/$name"i
+       func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+       # Maybe install the static library, too.
+       test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+       ;;
+
+      *.lo)
+       # Install (i.e. copy) a libtool object.
+
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # Deduce the name of the destination old-style object file.
+       case $destfile in
+       *.lo)
+         func_lo2o "$destfile"
+         staticdest=$func_lo2o_result
+         ;;
+       *.$objext)
+         staticdest="$destfile"
+         destfile=
+         ;;
+       *)
+         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         ;;
+       esac
+
+       # Install the libtool object if requested.
+       test -n "$destfile" && \
+         func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+       # Install the old object if enabled.
+       if test "$build_old_libs" = yes; then
+         # Deduce the name of the old-style object file.
+         func_lo2o "$file"
+         staticobj=$func_lo2o_result
+         func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+       fi
+       exit $EXIT_SUCCESS
+       ;;
+
+      *)
+       # Figure out destination file name, if it wasn't already specified.
+       if test -n "$destname"; then
+         destfile="$destdir/$destname"
+       else
+         func_basename "$file"
+         destfile="$func_basename_result"
+         destfile="$destdir/$destfile"
+       fi
+
+       # If the file is missing, and there is a .exe on the end, strip it
+       # because it is most likely a libtool script we actually want to
+       # install
+       stripped_ext=""
+       case $file in
+         *.exe)
+           if test ! -f "$file"; then
+             func_stripname '' '.exe' "$file"
+             file=$func_stripname_result
+             stripped_ext=".exe"
+           fi
+           ;;
+       esac
+
+       # Do a test to see if this is really a libtool program.
+       case $host in
+       *cygwin* | *mingw*)
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             wrapper=$func_ltwrapper_scriptname_result
+           else
+             func_stripname '' '.exe' "$file"
+             wrapper=$func_stripname_result
+           fi
+           ;;
+       *)
+           wrapper=$file
+           ;;
+       esac
+       if func_ltwrapper_script_p "$wrapper"; then
+         notinst_deplibs=
+         relink_command=
+
+         func_source "$wrapper"
+
+         # Check the variables that should have been set.
+         test -z "$generated_by_libtool_version" && \
+           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+
+         finalize=yes
+         for lib in $notinst_deplibs; do
+           # Check to see that each library is installed.
+           libdir=
+           if test -f "$lib"; then
+             func_source "$lib"
+           fi
+           libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           if test -n "$libdir" && test ! -f "$libfile"; then
+             func_warning "\`$lib' has not been installed in \`$libdir'"
+             finalize=no
+           fi
+         done
+
+         relink_command=
+         func_source "$wrapper"
+
+         outputname=
+         if test "$fast_install" = no && test -n "$relink_command"; then
+           $opt_dry_run || {
+             if test "$finalize" = yes; then
+               tmpdir=`func_mktempdir`
+               func_basename "$file$stripped_ext"
+               file="$func_basename_result"
+               outputname="$tmpdir/$file"
+               # Replace the output file specification.
+               relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+               $opt_silent || {
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
+               }
+               if eval "$relink_command"; then :
+                 else
+                 func_error "error: relink \`$file' with the above command before installing it"
+                 $opt_dry_run || ${RM}r "$tmpdir"
+                 continue
+               fi
+               file="$outputname"
+             else
+               func_warning "cannot relink \`$file'"
+             fi
+           }
+         else
+           # Install the binary that we compiled earlier.
+           file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+         fi
+       fi
+
+       # remove .exe since cygwin /usr/bin/install will append another
+       # one anyway
+       case $install_prog,$host in
+       */usr/bin/install*,*cygwin*)
+         case $file:$destfile in
+         *.exe:*.exe)
+           # this is ok
+           ;;
+         *.exe:*)
+           destfile=$destfile.exe
+           ;;
+         *:*.exe)
+           func_stripname '' '.exe' "$destfile"
+           destfile=$func_stripname_result
+           ;;
+         esac
+         ;;
+       esac
+       func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+       $opt_dry_run || if test -n "$outputname"; then
+         ${RM}r "$tmpdir"
+       fi
+       ;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name="$func_basename_result"
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+       func_show_eval "$old_striplib $oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run \`$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test "$mode" = install && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $opt_debug
+    my_outputname="$1"
+    my_originator="$2"
+    my_pic_p="${3-no}"
+    my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+       my_dlsyms="${my_outputname}S.c"
+      else
+       func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+       # Discover the nlist of each of the dlfiles.
+       nlist="$output_objdir/${my_outputname}.nm"
+
+       func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+       # Parse the name list into a source file.
+       func_verbose "creating $output_objdir/$my_dlsyms"
+
+       $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* External symbol declarations for the compiler. */\
+"
+
+       if test "$dlself" = yes; then
+         func_verbose "generating symbol list for \`$output'"
+
+         $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+         # Add our own program objects to the symbol list.
+         progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+         for progfile in $progfiles; do
+           func_verbose "extracting global C symbols from \`$progfile'"
+           $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
+         done
+
+         if test -n "$exclude_expsyms"; then
+           $opt_dry_run || {
+             eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         if test -n "$export_symbols_regex"; then
+           $opt_dry_run || {
+             eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+           }
+         fi
+
+         # Prepare the list of exported symbols
+         if test -z "$export_symbols"; then
+           export_symbols="$output_objdir/$outputname.exp"
+           $opt_dry_run || {
+             $RM $export_symbols
+             eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+             case $host in
+             *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+               ;;
+             esac
+           }
+         else
+           $opt_dry_run || {
+             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+             eval '$MV "$nlist"T "$nlist"'
+             case $host in
+               *cygwin | *mingw* | *cegcc* )
+                 eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                 eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+                 ;;
+             esac
+           }
+         fi
+       fi
+
+       for dlprefile in $dlprefiles; do
+         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_basename "$dlprefile"
+         name="$func_basename_result"
+         $opt_dry_run || {
+           eval '$ECHO ": $name " >> "$nlist"'
+           eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+         }
+       done
+
+       $opt_dry_run || {
+         # Make sure we have at least an empty file.
+         test -f "$nlist" || : > "$nlist"
+
+         if test -n "$exclude_expsyms"; then
+           $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+           $MV "$nlist"T "$nlist"
+         fi
+
+         # Try sorting and uniquifying the output.
+         if $GREP -v "^: " < "$nlist" |
+             if sort -k 3 </dev/null >/dev/null 2>&1; then
+               sort -k 3
+             else
+               sort +2
+             fi |
+             uniq > "$nlist"S; then
+           :
+         else
+           $GREP -v "^: " < "$nlist" > "$nlist"S
+         fi
+
+         if test -f "$nlist"S; then
+           eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+         else
+           $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
+         fi
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+"
+         case $host in
+         *cygwin* | *mingw* | *cegcc* )
+           $ECHO >> "$output_objdir/$my_dlsyms" "\
+/* DATA imports from DLLs on WIN32 con't be const, because
+   runtime relocations are performed -- see ld's documentation
+   on pseudo-relocs.  */"
+           lt_dlsym_const= ;;
+         *osf5*)
+           echo >> "$output_objdir/$my_dlsyms" "\
+/* This system does not cope well with relocations in const data */"
+           lt_dlsym_const= ;;
+         *)
+           lt_dlsym_const=const ;;
+         esac
+
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+extern $lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];
+$lt_dlsym_const lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{\
+  { \"$my_originator\", (void *) 0 },"
+
+         case $need_lib_prefix in
+         no)
+           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         *)
+           eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+           ;;
+         esac
+         $ECHO >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+       } # !$opt_dry_run
+
+       pic_flag_for_symtable=
+       case "$compile_command " in
+       *" -static "*) ;;
+       *)
+         case $host in
+         # compiling the symbol table file with pic_flag works around
+         # a FreeBSD bug that causes programs to crash when -lm is
+         # linked before any other PIC object.  But we must not use
+         # pic_flag when linking with -static.  The problem exists in
+         # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+           pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+         *-*-hpux*)
+           pic_flag_for_symtable=" $pic_flag"  ;;
+         *)
+           if test "X$my_pic_p" != Xno; then
+             pic_flag_for_symtable=" $pic_flag"
+           fi
+           ;;
+         esac
+         ;;
+       esac
+       symtab_cflags=
+       for arg in $LTCFLAGS; do
+         case $arg in
+         -pie | -fpie | -fPIE) ;;
+         *) symtab_cflags="$symtab_cflags $arg" ;;
+         esac
+       done
+
+       # Now compile the dynamic symbol file.
+       func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+       # Clean up the generated files.
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
+
+       # Transform the symbol file into the correct name.
+       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       case $host in
+       *cygwin* | *mingw* | *cegcc* )
+         if test -f "$output_objdir/$my_outputname.def"; then
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+         else
+           compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+           finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         fi
+         ;;
+       *)
+         compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
+         ;;
+       esac
+       ;;
+      *)
+       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       ;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+func_win32_libid ()
+{
+  $opt_debug
+  win32_libid_type="unknown"
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
+      win32_nmres=`eval $NM -f posix -A $1 |
+       $SED -n -e '
+           1,100{
+               / I /{
+                   s,.*,import,
+                   p
+                   q
+               }
+           }'`
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $opt_debug
+    f_ex_an_ar_dir="$1"; shift
+    f_ex_an_ar_oldlib="$1"
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $opt_debug
+    my_gentop="$1"; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=""
+    my_xlib=""
+    my_xabs=""
+    my_xdir=""
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
+       *) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib="$func_basename_result"
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+       *" $my_xlib_u "*)
+         func_arith $extracted_serial + 1
+         extracted_serial=$func_arith_result
+         my_xlib_u=lt$extracted_serial-$my_xlib ;;
+       *) break ;;
+       esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir="$my_gentop/$my_xlib_u"
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+       func_verbose "Extracting $my_xabs"
+       # Do not bother doing anything if just a dry run
+       $opt_dry_run || {
+         darwin_orig_dir=`pwd`
+         cd $my_xdir || exit $?
+         darwin_archive=$my_xabs
+         darwin_curdir=`pwd`
+         darwin_base_archive=`basename "$darwin_archive"`
+         darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+         if test -n "$darwin_arches"; then
+           darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+           darwin_arch=
+           func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+           for darwin_arch in  $darwin_arches ; do
+             func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
+             cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
+             func_extract_an_archive "`pwd`" "${darwin_base_archive}"
+             cd "$darwin_curdir"
+             $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
+           done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
+           darwin_file=
+           darwin_files=
+           for darwin_file in $darwin_filelist; do
+             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
+             $LIPO -create -output "$darwin_file" $darwin_files
+           done # $darwin_filelist
+           $RM -rf unfat-$$
+           cd "$darwin_orig_dir"
+         else
+           cd $darwin_orig_dir
+           func_extract_an_archive "$my_xdir" "$my_xabs"
+         fi # $darwin_arches
+       } # !$opt_dry_run
+       ;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+       ;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
+    done
+
+    func_extract_archives_result="$my_oldobjs"
+}
+
+
+
+# func_emit_wrapper_part1 [arg=no]
+#
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
+{
+       func_emit_wrapper_part1_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part1_arg1=$1
+       fi
+
+       $ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='${SED} -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    ECHO=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$ECHO will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+       $ECHO "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
+  done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+       func_emit_wrapper_part2_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_part2_arg1=$1
+       fi
+
+       $ECHO "\
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+       if test "$fast_install" = yes; then
+         $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+         $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+       $ECHO \"\$relink_command_output\" >&2
+       $RM \"\$progdir/\$file\"
+       exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+       else
+         $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+       fi
+
+       $ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+       # Export our shlibpath_var if we have one.
+       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+         $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+       fi
+
+       # fixup the dll searchpath if we need to.
+       if test -n "$dllsearchpath"; then
+         $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+       fi
+
+       $ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+       case $host in
+       # Backslashes separate directories on plain windows
+       *-*-mingw | *-*-os2* | *-cegcc*)
+         $ECHO "\
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+         ;;
+
+       *)
+         $ECHO "\
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+         ;;
+       esac
+       $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+       func_emit_wrapper_arg1=no
+       if test -n "$1" ; then
+         func_emit_wrapper_arg1=$1
+       fi
+
+       # split this up so that func_emit_cwrapperexe_src
+       # can call each part independently.
+       func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+       func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
+
+# func_to_host_path arg
+#
+# Convert paths to host format when used with build tools.
+# Intended for use with "native" mingw (where libtool itself
+# is running under the msys shell), or in the following cross-
+# build environments:
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+# where wine is equipped with the `winepath' executable.
+# In the native mingw case, the (msys) shell automatically
+# converts paths for any non-msys applications it launches,
+# but that facility isn't available from inside the cwrapper.
+# Similar accommodations are necessary for $host mingw and
+# $build cygwin.  Calling this function does no harm for other
+# $host/$build combinations not listed above.
+#
+# ARG is the path (on $build) that should be converted to
+# the proper representation for $host. The result is stored
+# in $func_to_host_path_result.
+func_to_host_path ()
+{
+  func_to_host_path_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        case $build in
+          *mingw* ) # actually, msys
+            # awkward: cmd appends spaces to result
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_path_tmp1=`( cmd //c echo "$1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_path_tmp1=`cygpath -w "$1"`
+            func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # Unfortunately, winepath does not exit with a non-zero
+            # error code, so we are forced to check the contents of
+            # stdout. On the other hand, if the command is not
+            # found, the shell will set an exit code of 127 and print
+            # *an error message* to stdout. So we must check for both
+            # error code of zero AND non-empty stdout, which explains
+            # the odd construction:
+            func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
+            if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
+              func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
+                $SED -e "$lt_sed_naive_backslashify"`
+            else
+              # Allow warning below.
+              func_to_host_path_result=""
+            fi
+            ;;
+        esac
+        if test -z "$func_to_host_path_result" ; then
+          func_error "Could not determine host path corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback:
+          func_to_host_path_result="$1"
+        fi
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_path
+
+# func_to_host_pathlist arg
+#
+# Convert pathlists to host format when used with build tools.
+# See func_to_host_path(), above. This function supports the
+# following $build/$host combinations (but does no harm for
+# combinations not listed here):
+#    $build          $host
+#    mingw (msys)    mingw  [e.g. native]
+#    cygwin          mingw
+#    *nix + wine     mingw
+#
+# Path separators are also converted from $build format to
+# $host format. If ARG begins or ends with a path separator
+# character, it is preserved (but converted to $host format)
+# on output.
+#
+# ARG is a pathlist (on $build) that should be converted to
+# the proper representation on $host. The result is stored
+# in $func_to_host_pathlist_result.
+func_to_host_pathlist ()
+{
+  func_to_host_pathlist_result="$1"
+  if test -n "$1" ; then
+    case $host in
+      *mingw* )
+        lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+        # Remove leading and trailing path separator characters from
+        # ARG. msys behavior is inconsistent here, cygpath turns them
+        # into '.;' and ';.', and winepath ignores them completely.
+        func_to_host_pathlist_tmp2="$1"
+        # Once set for this call, this variable should not be
+        # reassigned. It is used in tha fallback case.
+        func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
+          $SED -e 's|^:*||' -e 's|:*$||'`
+        case $build in
+          *mingw* ) # Actually, msys.
+            # Awkward: cmd appends spaces to result.
+            lt_sed_strip_trailing_spaces="s/[ ]*\$//"
+            func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
+              $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          *cygwin* )
+            func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
+            func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
+              $SED -e "$lt_sed_naive_backslashify"`
+            ;;
+          * )
+            # unfortunately, winepath doesn't convert pathlists
+            func_to_host_pathlist_result=""
+            func_to_host_pathlist_oldIFS=$IFS
+            IFS=:
+            for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
+              IFS=$func_to_host_pathlist_oldIFS
+              if test -n "$func_to_host_pathlist_f" ; then
+                func_to_host_path "$func_to_host_pathlist_f"
+                if test -n "$func_to_host_path_result" ; then
+                  if test -z "$func_to_host_pathlist_result" ; then
+                    func_to_host_pathlist_result="$func_to_host_path_result"
+                  else
+                    func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
+                  fi
+                fi
+              fi
+              IFS=:
+            done
+            IFS=$func_to_host_pathlist_oldIFS
+            ;;
+        esac
+        if test -z "$func_to_host_pathlist_result" ; then
+          func_error "Could not determine the host path(s) corresponding to"
+          func_error "  '$1'"
+          func_error "Continuing, but uninstalled executables may not work."
+          # Fallback. This may break if $1 contains DOS-style drive
+          # specifications. The fix is not to complicate the expression
+          # below, but for the user to provide a working wine installation
+          # with winepath so that path translation in the cross-to-mingw
+          # case works properly.
+          lt_replace_pathsep_nix_to_dos="s|:|;|g"
+          func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
+            $SED -e "$lt_replace_pathsep_nix_to_dos"`
+        fi
+        # Now, add the leading and trailing path separators back
+        case "$1" in
+          :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
+            ;;
+        esac
+        case "$1" in
+          *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
+            ;;
+        esac
+        ;;
+    esac
+  fi
+}
+# end: func_to_host_pathlist
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+       cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+
+   Currently, it simply execs the wrapper *script* "$SHELL $output",
+   but could eventually absorb all of the scripts functionality and
+   exec $objdir/$outputname directly.
+*/
+EOF
+           cat <<"EOF"
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+# define setmode _setmode
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+#  define HAVE_SETENV
+#  ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+#  endif
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#if defined(PATH_MAX)
+# define LT_PATHMAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+#ifdef _MSC_VER
+# define S_IXUSR _S_IEXEC
+# define stat _stat
+# ifndef _INTPTR_T_DEFINED
+#  define intptr_t int
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
+  defined (__OS2__)
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+       (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifdef __CYGWIN__
+# define FOPEN_WB "wb"
+#endif
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free ((void *) stale); stale = 0; } \
+} while (0)
+
+#undef LTWRAPPER_DEBUGPRINTF
+#if defined DEBUGWRAPPER
+# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
+static void
+ltwrapper_debugprintf (const char *fmt, ...)
+{
+    va_list args;
+    va_start (args, fmt);
+    (void) vfprintf (stderr, fmt, args);
+    va_end (args);
+}
+#else
+# define LTWRAPPER_DEBUGPRINTF(args)
+#endif
+
+const char *program_name = NULL;
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_fatal (const char *message, ...);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_opt_process_env_set (const char *arg);
+void lt_opt_process_env_prepend (const char *arg);
+void lt_opt_process_env_append (const char *arg);
+int lt_split_name_value (const char *arg, char** name, char** value);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+
+static const char *script_text_part1 =
+EOF
+
+           func_emit_wrapper_part1 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+           cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+           func_emit_wrapper_part2 yes |
+               $SED -e 's/\([\\"]\)/\\\1/g' \
+                    -e 's/^/  "/' -e 's/$/\\n"/'
+           echo ";"
+
+           cat <<EOF
+const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+           if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_pathlist "$temp_rpath"
+             cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test -n "$dllsearchpath"; then
+              func_to_host_pathlist "$dllsearchpath:"
+             cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_pathlist_result";
+EOF
+           else
+             cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+           fi
+
+           if test "$fast_install" = yes; then
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+           else
+             cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+           fi
+
+
+           cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+#define LTWRAPPER_OPTION_PREFIX_LENGTH  5
+
+static const size_t opt_prefix_len         = LTWRAPPER_OPTION_PREFIX_LENGTH;
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+
+static const size_t env_set_opt_len     = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
+static const char *env_set_opt          = LTWRAPPER_OPTION_PREFIX "env-set";
+  /* argument is putenv-style "foo=bar", value of foo is set to bar */
+
+static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
+static const char *env_prepend_opt      = LTWRAPPER_OPTION_PREFIX "env-prepend";
+  /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
+
+static const size_t env_append_opt_len  = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
+static const char *env_append_opt       = LTWRAPPER_OPTION_PREFIX "env-append";
+  /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  intptr_t rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) argv[0]      : %s\n", argv[0]));
+  LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
+
+  /* very simple arg parsing; don't want to rely on getopt */
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp (argv[i], dumpscript_opt) == 0)
+       {
+EOF
+           case "$host" in
+             *mingw* | *cygwin* )
+               # make stdout use "unix" line endings
+               echo "          setmode(1,_O_BINARY);"
+               ;;
+             esac
+
+           cat <<"EOF"
+         printf ("%s", script_text_part1);
+         printf ("%s", script_text_part2);
+         return 0;
+       }
+    }
+
+  newargz = XMALLOC (char *, argc + 1);
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal ("Couldn't find %s", argv[0]);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
+                         tmp_pathspec));
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
+                         actual_cwrapper_path));
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
+                         target_name));
+EOF
+
+           cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+                   strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+           cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+           case $host_os in
+             mingw*)
+           cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+       *p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+       *p = '/';
+      }
+  }
+EOF
+           ;;
+           esac
+
+           cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
+        {
+          if (argv[i][env_set_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_set_opt_len + 1;
+              lt_opt_process_env_set (p);
+            }
+          else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_set (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_set_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
+        {
+          if (argv[i][env_prepend_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_prepend_opt_len + 1;
+              lt_opt_process_env_prepend (p);
+            }
+          else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_prepend (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_prepend_opt);
+          continue;
+        }
+      if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
+        {
+          if (argv[i][env_append_opt_len] == '=')
+            {
+              const char *p = argv[i] + env_append_opt_len + 1;
+              lt_opt_process_env_append (p);
+            }
+          else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
+            {
+              lt_opt_process_env_append (argv[++i]); /* don't copy */
+            }
+          else
+            lt_fatal ("%s missing required argument", env_append_opt);
+          continue;
+        }
+      if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal ("Unrecognized option in %s namespace: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+  LTWRAPPER_DEBUGPRINTF     (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
+  for (i = 0; i < newargc; i++)
+    {
+      LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d]   : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
+    }
+
+EOF
+
+           case $host_os in
+             mingw*)
+               cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
+      return 127;
+    }
+  return rval;
+EOF
+               ;;
+             *)
+               cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+               ;;
+           esac
+
+           cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal ("Memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+                         string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(check_executable)  : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  LTWRAPPER_DEBUGPRINTF (("(make_executable)   : %s\n",
+                         path ? (*path ? path : "EMPTY!") : "NULL!"));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  int tmp_len;
+  char *concat_name;
+
+  LTWRAPPER_DEBUGPRINTF (("(find_executable)   : %s\n",
+                         wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+       return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+       {
+         concat_name = xstrdup (wrapper);
+         if (check_executable (concat_name))
+           return concat_name;
+         XFREE (concat_name);
+       }
+#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+       has_slash = 1;
+       break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+       {
+         for (p = path; *p; p = p_next)
+           {
+             const char *q;
+             size_t p_len;
+             for (q = p; *q; q++)
+               if (IS_PATH_SEPARATOR (*q))
+                 break;
+             p_len = q - p;
+             p_next = (*q == '\0' ? q : q + 1);
+             if (p_len == 0)
+               {
+                 /* empty path: current directory */
+                 if (getcwd (tmp, LT_PATHMAX) == NULL)
+                   lt_fatal ("getcwd failed");
+                 tmp_len = strlen (tmp);
+                 concat_name =
+                   XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, tmp, tmp_len);
+                 concat_name[tmp_len] = '/';
+                 strcpy (concat_name + tmp_len + 1, wrapper);
+               }
+             else
+               {
+                 concat_name =
+                   XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+                 memcpy (concat_name, p, p_len);
+                 concat_name[p_len] = '/';
+                 strcpy (concat_name + p_len + 1, wrapper);
+               }
+             if (check_executable (concat_name))
+               return concat_name;
+             XFREE (concat_name);
+           }
+       }
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal ("getcwd failed");
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
+                             tmp_pathspec));
+      if (lstat (tmp_pathspec, &s) == 0)
+       {
+         if (S_ISLNK (s.st_mode) != 0)
+           {
+             has_symlinks = 1;
+             break;
+           }
+
+         /* search backwards for last DIR_SEPARATOR */
+         p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+         while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           p--;
+         if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+           {
+             /* no more DIR_SEPARATORS left */
+             break;
+           }
+         *p = '\0';
+       }
+      else
+       {
+         char *errstr = strerror (errno);
+         lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
+       }
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal ("Could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (strcmp (str, pat) == 0)
+       *str = '\0';
+    }
+  return str;
+}
+
+static void
+lt_error_core (int exit_status, const char *mode,
+              const char *message, va_list ap)
+{
+  fprintf (stderr, "%s: %s: ", program_name, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
+  va_end (ap);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    int len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      int orig_value_len = strlen (orig_value);
+      int add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+int
+lt_split_name_value (const char *arg, char** name, char** value)
+{
+  const char *p;
+  int len;
+  if (!arg || !*arg)
+    return 1;
+
+  p = strchr (arg, (int)'=');
+
+  if (!p)
+    return 1;
+
+  *value = xstrdup (++p);
+
+  len = strlen (arg) - strlen (*value);
+  *name = XMALLOC (char, len);
+  strncpy (*name, arg, len-1);
+  (*name)[len - 1] = '\0';
+
+  return 0;
+}
+
+void
+lt_opt_process_env_set (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
+    }
+
+  lt_setenv (name, value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_prepend (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 0);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_opt_process_env_append (const char *arg)
+{
+  char *name = NULL;
+  char *value = NULL;
+  char *new_value = NULL;
+
+  if (lt_split_name_value (arg, &name, &value) != 0)
+    {
+      XFREE (name);
+      XFREE (value);
+      lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
+    }
+
+  new_value = lt_extend_str (getenv (name), value, 1);
+  lt_setenv (name, new_value);
+  XFREE (new_value);
+  XFREE (name);
+  XFREE (value);
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      int len = strlen (new_value);
+      while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[len-1] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                          (name ? name : "<NULL>"),
+                          (value ? value : "<NULL>")));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $opt_debug
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module="${wl}-single_module"
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+       test "$build_libtool_libs" != yes && \
+         func_fatal_configuration "can not build a shared library"
+       build_old_libs=no
+       break
+       ;;
+      -all-static | -static | -static-libtool-libs)
+       case $arg in
+       -all-static)
+         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+           func_warning "complete static linking is impossible in this configuration"
+         fi
+         if test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       -static)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=built
+         ;;
+       -static-libtool-libs)
+         if test -z "$pic_flag" && test -n "$link_static_flag"; then
+           dlopen_self=$dlopen_self_static
+         fi
+         prefer_static_libs=yes
+         ;;
+       esac
+       build_libtool_libs=no
+       build_old_libs=yes
+       break
+       ;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg="$1"
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+       case $prev in
+       output)
+         func_append compile_command " @OUTPUT@"
+         func_append finalize_command " @OUTPUT@"
+         ;;
+       esac
+
+       case $prev in
+       dlfiles|dlprefiles)
+         if test "$preload" = no; then
+           # Add the symbol object into the linking commands.
+           func_append compile_command " @SYMFILE@"
+           func_append finalize_command " @SYMFILE@"
+           preload=yes
+         fi
+         case $arg in
+         *.la | *.lo) ;;  # We handle these cases below.
+         force)
+           if test "$dlself" = no; then
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         self)
+           if test "$prev" = dlprefiles; then
+             dlself=yes
+           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+             dlself=yes
+           else
+             dlself=needless
+             export_dynamic=yes
+           fi
+           prev=
+           continue
+           ;;
+         *)
+           if test "$prev" = dlfiles; then
+             dlfiles="$dlfiles $arg"
+           else
+             dlprefiles="$dlprefiles $arg"
+           fi
+           prev=
+           continue
+           ;;
+         esac
+         ;;
+       expsyms)
+         export_symbols="$arg"
+         test -f "$arg" \
+           || func_fatal_error "symbol file \`$arg' does not exist"
+         prev=
+         continue
+         ;;
+       expsyms_regex)
+         export_symbols_regex="$arg"
+         prev=
+         continue
+         ;;
+       framework)
+         case $host in
+           *-*-darwin*)
+             case "$deplibs " in
+               *" $qarg.ltframework "*) ;;
+               *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
+                  ;;
+             esac
+             ;;
+         esac
+         prev=
+         continue
+         ;;
+       inst_prefix)
+         inst_prefix_dir="$arg"
+         prev=
+         continue
+         ;;
+       objectlist)
+         if test -f "$arg"; then
+           save_arg=$arg
+           moreargs=
+           for fil in `cat "$save_arg"`
+           do
+#            moreargs="$moreargs $fil"
+             arg=$fil
+             # A libtool-controlled object.
+
+             # Check to see that this really is a libtool object.
+             if func_lalib_unsafe_p "$arg"; then
+               pic_object=
+               non_pic_object=
+
+               # Read the .lo file
+               func_source "$arg"
+
+               if test -z "$pic_object" ||
+                  test -z "$non_pic_object" ||
+                  test "$pic_object" = none &&
+                  test "$non_pic_object" = none; then
+                 func_fatal_error "cannot find name of object for \`$arg'"
+               fi
+
+               # Extract subdirectory from the argument.
+               func_dirname "$arg" "/" ""
+               xdir="$func_dirname_result"
+
+               if test "$pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 pic_object="$xdir$pic_object"
+
+                 if test "$prev" = dlfiles; then
+                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                     dlfiles="$dlfiles $pic_object"
+                     prev=
+                     continue
+                   else
+                     # If libtool objects are unsupported, then we need to preload.
+                     prev=dlprefiles
+                   fi
+                 fi
+
+                 # CHECK ME:  I think I busted this.  -Ossama
+                 if test "$prev" = dlprefiles; then
+                   # Preload the old-style object.
+                   dlprefiles="$dlprefiles $pic_object"
+                   prev=
+                 fi
+
+                 # A PIC object.
+                 func_append libobjs " $pic_object"
+                 arg="$pic_object"
+               fi
+
+               # Non-PIC object.
+               if test "$non_pic_object" != none; then
+                 # Prepend the subdirectory the object is found in.
+                 non_pic_object="$xdir$non_pic_object"
+
+                 # A standard non-PIC object
+                 func_append non_pic_objects " $non_pic_object"
+                 if test -z "$pic_object" || test "$pic_object" = none ; then
+                   arg="$non_pic_object"
+                 fi
+               else
+                 # If the PIC object exists, use it instead.
+                 # $xdir was prepended to $pic_object above.
+                 non_pic_object="$pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               fi
+             else
+               # Only an error if not doing a dry-run.
+               if $opt_dry_run; then
+                 # Extract subdirectory from the argument.
+                 func_dirname "$arg" "/" ""
+                 xdir="$func_dirname_result"
+
+                 func_lo2o "$arg"
+                 pic_object=$xdir$objdir/$func_lo2o_result
+                 non_pic_object=$xdir$func_lo2o_result
+                 func_append libobjs " $pic_object"
+                 func_append non_pic_objects " $non_pic_object"
+               else
+                 func_fatal_error "\`$arg' is not a valid libtool object"
+               fi
+             fi
+           done
+         else
+           func_fatal_error "link input file \`$arg' does not exist"
+         fi
+         arg=$save_arg
+         prev=
+         continue
+         ;;
+       precious_regex)
+         precious_files_regex="$arg"
+         prev=
+         continue
+         ;;
+       release)
+         release="-$arg"
+         prev=
+         continue
+         ;;
+       rpath | xrpath)
+         # We need an absolute path.
+         case $arg in
+         [\\/]* | [A-Za-z]:[\\/]*) ;;
+         *)
+           func_fatal_error "only absolute run-paths are allowed"
+           ;;
+         esac
+         if test "$prev" = rpath; then
+           case "$rpath " in
+           *" $arg "*) ;;
+           *) rpath="$rpath $arg" ;;
+           esac
+         else
+           case "$xrpath " in
+           *" $arg "*) ;;
+           *) xrpath="$xrpath $arg" ;;
+           esac
+         fi
+         prev=
+         continue
+         ;;
+       shrext)
+         shrext_cmds="$arg"
+         prev=
+         continue
+         ;;
+       weak)
+         weak_libs="$weak_libs $arg"
+         prev=
+         continue
+         ;;
+       xcclinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xcompiler)
+         compiler_flags="$compiler_flags $qarg"
+         prev=
+         func_append compile_command " $qarg"
+         func_append finalize_command " $qarg"
+         continue
+         ;;
+       xlinker)
+         linker_flags="$linker_flags $qarg"
+         compiler_flags="$compiler_flags $wl$qarg"
+         prev=
+         func_append compile_command " $wl$qarg"
+         func_append finalize_command " $wl$qarg"
+         continue
+         ;;
+       *)
+         eval "$prev=\"\$arg\""
+         prev=
+         continue
+         ;;
+       esac
+      fi # test -n "$prev"
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+       if test -n "$link_static_flag"; then
+         # See comment for -static flag below, for more details.
+         func_append compile_command " $link_static_flag"
+         func_append finalize_command " $link_static_flag"
+       fi
+       continue
+       ;;
+
+      -allow-undefined)
+       # FIXME: remove this flag sometime in the future.
+       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       ;;
+
+      -avoid-version)
+       avoid_version=yes
+       continue
+       ;;
+
+      -dlopen)
+       prev=dlfiles
+       continue
+       ;;
+
+      -dlpreopen)
+       prev=dlprefiles
+       continue
+       ;;
+
+      -export-dynamic)
+       export_dynamic=yes
+       continue
+       ;;
+
+      -export-symbols | -export-symbols-regex)
+       if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+         func_fatal_error "more than one -exported-symbols argument is not allowed"
+       fi
+       if test "X$arg" = "X-export-symbols"; then
+         prev=expsyms
+       else
+         prev=expsyms_regex
+       fi
+       continue
+       ;;
+
+      -framework)
+       prev=framework
+       continue
+       ;;
+
+      -inst-prefix-dir)
+       prev=inst_prefix
+       continue
+       ;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+       case $with_gcc/$host in
+       no/*-*-irix* | /*-*-irix*)
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         ;;
+       esac
+       continue
+       ;;
+
+      -L*)
+       func_stripname '-L' '' "$arg"
+       dir=$func_stripname_result
+       if test -z "$dir"; then
+         if test "$#" -gt 0; then
+           func_fatal_error "require no space between \`-L' and \`$1'"
+         else
+           func_fatal_error "need path for \`-L' option"
+         fi
+       fi
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         absdir=`cd "$dir" && pwd`
+         test -z "$absdir" && \
+           func_fatal_error "cannot determine absolute directory name of \`$dir'"
+         dir="$absdir"
+         ;;
+       esac
+       case "$deplibs " in
+       *" -L$dir "*) ;;
+       *)
+         deplibs="$deplibs -L$dir"
+         lib_search_path="$lib_search_path $dir"
+         ;;
+       esac
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$dir:"*) ;;
+         ::) dllsearchpath=$dir;;
+         *) dllsearchpath="$dllsearchpath:$dir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+       continue
+       ;;
+
+      -l*)
+       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
+           # These systems don't actually have a C or math library (as such)
+           continue
+           ;;
+         *-*-os2*)
+           # These systems don't actually have a C library (as such)
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C and math libraries are in the System framework
+           deplibs="$deplibs System.ltframework"
+           continue
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           test "X$arg" = "X-lc" && continue
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           test "X$arg" = "X-lc" && continue
+           ;;
+         esac
+       elif test "X$arg" = "X-lc_r"; then
+        case $host in
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+          # Do not include libc_r directly, use -pthread flag.
+          continue
+          ;;
+        esac
+       fi
+       deplibs="$deplibs $arg"
+       continue
+       ;;
+
+      -module)
+       module=yes
+       continue
+       ;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       prev=xcompiler
+       continue
+       ;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       compiler_flags="$compiler_flags $arg"
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+       case "$new_inherited_linker_flags " in
+           *" $arg "*) ;;
+           * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
+       esac
+       continue
+       ;;
+
+      -multi_module)
+       single_module="${wl}-multi_module"
+       continue
+       ;;
+
+      -no-fast-install)
+       fast_install=no
+       continue
+       ;;
+
+      -no-install)
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+         # The PATH hackery in wrapper scripts is required on Windows
+         # and Darwin in order for the loader to find any dlls it needs.
+         func_warning "\`-no-install' is ignored for $host"
+         func_warning "assuming \`-no-fast-install' instead"
+         fast_install=no
+         ;;
+       *) no_install=yes ;;
+       esac
+       continue
+       ;;
+
+      -no-undefined)
+       allow_undefined=no
+       continue
+       ;;
+
+      -objectlist)
+       prev=objectlist
+       continue
+       ;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+       prev=precious_regex
+       continue
+       ;;
+
+      -release)
+       prev=release
+       continue
+       ;;
+
+      -rpath)
+       prev=rpath
+       continue
+       ;;
+
+      -R)
+       prev=xrpath
+       continue
+       ;;
+
+      -R*)
+       func_stripname '-R' '' "$arg"
+       dir=$func_stripname_result
+       # We need an absolute path.
+       case $dir in
+       [\\/]* | [A-Za-z]:[\\/]*) ;;
+       *)
+         func_fatal_error "only absolute run-paths are allowed"
+         ;;
+       esac
+       case "$xrpath " in
+       *" $dir "*) ;;
+       *) xrpath="$xrpath $dir" ;;
+       esac
+       continue
+       ;;
+
+      -shared)
+       # The effects of -shared are defined in a previous loop.
+       continue
+       ;;
+
+      -shrext)
+       prev=shrext
+       continue
+       ;;
+
+      -static | -static-libtool-libs)
+       # The effects of -static are defined in a previous loop.
+       # We used to do the same as -all-static on platforms that
+       # didn't have a PIC flag, but the assumption that the effects
+       # would be equivalent was wrong.  It would break on at least
+       # Digital Unix and AIX.
+       continue
+       ;;
+
+      -thread-safe)
+       thread_safe=yes
+       continue
+       ;;
+
+      -version-info)
+       prev=vinfo
+       continue
+       ;;
+
+      -version-number)
+       prev=vinfo
+       vinfo_number=yes
+       continue
+       ;;
+
+      -weak)
+        prev=weak
+       continue
+       ;;
+
+      -Wc,*)
+       func_stripname '-Wc,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Wl,*)
+       func_stripname '-Wl,' '' "$arg"
+       args=$func_stripname_result
+       arg=
+       save_ifs="$IFS"; IFS=','
+       for flag in $args; do
+         IFS="$save_ifs"
+          func_quote_for_eval "$flag"
+         arg="$arg $wl$func_quote_for_eval_result"
+         compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
+         linker_flags="$linker_flags $func_quote_for_eval_result"
+       done
+       IFS="$save_ifs"
+       func_stripname ' ' '' "$arg"
+       arg=$func_stripname_result
+       ;;
+
+      -Xcompiler)
+       prev=xcompiler
+       continue
+       ;;
+
+      -Xlinker)
+       prev=xlinker
+       continue
+       ;;
+
+      -XCClinker)
+       prev=xcclinker
+       continue
+       ;;
+
+      # -msg_* for osf cc
+      -msg_*)
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
+      # -r[0-9][0-9]* specifies the processor on the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
+      # +DA*, +DD* enable 64-bit mode on the HP compiler
+      # -q* pass through compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* pass through architecture-specific
+      # compiler args for GCC
+      # -F/path gives path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
+      # @file GCC response files
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        compiler_flags="$compiler_flags $arg"
+        continue
+        ;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+
+      *.$objext)
+       # A standard object.
+       objs="$objs $arg"
+       ;;
+
+      *.lo)
+       # A libtool-controlled object.
+
+       # Check to see that this really is a libtool object.
+       if func_lalib_unsafe_p "$arg"; then
+         pic_object=
+         non_pic_object=
+
+         # Read the .lo file
+         func_source "$arg"
+
+         if test -z "$pic_object" ||
+            test -z "$non_pic_object" ||
+            test "$pic_object" = none &&
+            test "$non_pic_object" = none; then
+           func_fatal_error "cannot find name of object for \`$arg'"
+         fi
+
+         # Extract subdirectory from the argument.
+         func_dirname "$arg" "/" ""
+         xdir="$func_dirname_result"
+
+         if test "$pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           pic_object="$xdir$pic_object"
+
+           if test "$prev" = dlfiles; then
+             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+               dlfiles="$dlfiles $pic_object"
+               prev=
+               continue
+             else
+               # If libtool objects are unsupported, then we need to preload.
+               prev=dlprefiles
+             fi
+           fi
+
+           # CHECK ME:  I think I busted this.  -Ossama
+           if test "$prev" = dlprefiles; then
+             # Preload the old-style object.
+             dlprefiles="$dlprefiles $pic_object"
+             prev=
+           fi
+
+           # A PIC object.
+           func_append libobjs " $pic_object"
+           arg="$pic_object"
+         fi
+
+         # Non-PIC object.
+         if test "$non_pic_object" != none; then
+           # Prepend the subdirectory the object is found in.
+           non_pic_object="$xdir$non_pic_object"
+
+           # A standard non-PIC object
+           func_append non_pic_objects " $non_pic_object"
+           if test -z "$pic_object" || test "$pic_object" = none ; then
+             arg="$non_pic_object"
+           fi
+         else
+           # If the PIC object exists, use it instead.
+           # $xdir was prepended to $pic_object above.
+           non_pic_object="$pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         fi
+       else
+         # Only an error if not doing a dry-run.
+         if $opt_dry_run; then
+           # Extract subdirectory from the argument.
+           func_dirname "$arg" "/" ""
+           xdir="$func_dirname_result"
+
+           func_lo2o "$arg"
+           pic_object=$xdir$objdir/$func_lo2o_result
+           non_pic_object=$xdir$func_lo2o_result
+           func_append libobjs " $pic_object"
+           func_append non_pic_objects " $non_pic_object"
+         else
+           func_fatal_error "\`$arg' is not a valid libtool object"
+         fi
+       fi
+       ;;
+
+      *.$libext)
+       # An archive.
+       deplibs="$deplibs $arg"
+       old_deplibs="$old_deplibs $arg"
+       continue
+       ;;
+
+      *.la)
+       # A libtool-controlled library.
+
+       if test "$prev" = dlfiles; then
+         # This library was specified with -dlopen.
+         dlfiles="$dlfiles $arg"
+         prev=
+       elif test "$prev" = dlprefiles; then
+         # The library was specified with -dlpreopen.
+         dlprefiles="$dlprefiles $arg"
+         prev=
+       else
+         deplibs="$deplibs $arg"
+       fi
+       continue
+       ;;
+
+      # Some other compiler argument.
+      *)
+       # Unknown arguments in both finalize_command and compile_command need
+       # to be aesthetically quoted because they are evaled later.
+       func_quote_for_eval "$arg"
+       arg="$func_quote_for_eval_result"
+       ;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+       func_append compile_command " $arg"
+       func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the \`$prevarg' option requires an argument"
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname="$func_basename_result"
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    func_dirname "$output" "/" ""
+    output_objdir="$func_dirname_result$objdir"
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_duplicate_deps ; then
+       case "$libs " in
+       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+       esac
+      fi
+      libs="$libs $deplib"
+    done
+
+    if test "$linkmode" = lib; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+       for pre_post_dep in $predeps $postdeps; do
+         case "$pre_post_deps " in
+         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
+         esac
+         pre_post_deps="$pre_post_deps $pre_post_dep"
+       done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+       passes="conv dlpreopen link"
+       for file in $dlfiles $dlprefiles; do
+         case $file in
+         *.la) ;;
+         *)
+           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           ;;
+         esac
+       done
+       ;;
+    prog)
+       compile_deplibs=
+       finalize_deplibs=
+       alldeplibs=no
+       newdlfiles=
+       newdlprefiles=
+       passes="conv scan dlopen dlpreopen link"
+       ;;
+    *)  passes="conv"
+       ;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test "$linkmode,$pass" = "lib,link"; then
+       ## FIXME: Find the place where the list is rebuilt in the wrong
+       ##        order, and fix it there properly
+        tmp_deplibs=
+       for deplib in $deplibs; do
+         tmp_deplibs="$deplib $tmp_deplibs"
+       done
+       deplibs="$tmp_deplibs"
+      fi
+
+      if test "$linkmode,$pass" = "lib,link" ||
+        test "$linkmode,$pass" = "prog,scan"; then
+       libs="$deplibs"
+       deplibs=
+      fi
+      if test "$linkmode" = prog; then
+       case $pass in
+       dlopen) libs="$dlfiles" ;;
+       dlpreopen) libs="$dlprefiles" ;;
+       link)
+         libs="$deplibs %DEPLIBS%"
+         test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
+         ;;
+       esac
+      fi
+      if test "$linkmode,$pass" = "lib,dlpreopen"; then
+       # Collect and forward deplibs of preopened libtool libs
+       for lib in $dlprefiles; do
+         # Ignore non-libtool-libs
+         dependency_libs=
+         case $lib in
+         *.la) func_source "$lib" ;;
+         esac
+
+         # Collect preopened libtool deplibs, except any this library
+         # has declared as weak libs
+         for deplib in $dependency_libs; do
+            deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
+           case " $weak_libs " in
+           *" $deplib_base "*) ;;
+           *) deplibs="$deplibs $deplib" ;;
+           esac
+         done
+       done
+       libs="$dlprefiles"
+      fi
+      if test "$pass" = dlopen; then
+       # Collect dlpreopened libraries
+       save_deplibs="$deplibs"
+       deplibs=
+      fi
+
+      for deplib in $libs; do
+       lib=
+       found=no
+       case $deplib in
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           compiler_flags="$compiler_flags $deplib"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -l*)
+         if test "$linkmode" != lib && test "$linkmode" != prog; then
+           func_warning "\`-l' is ignored for archives/objects"
+           continue
+         fi
+         func_stripname '-l' '' "$deplib"
+         name=$func_stripname_result
+         if test "$linkmode" = lib; then
+           searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+         else
+           searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+         fi
+         for searchdir in $searchdirs; do
+           for search_ext in .la $std_shrext .so .a; do
+             # Search the libtool library
+             lib="$searchdir/lib${name}${search_ext}"
+             if test -f "$lib"; then
+               if test "$search_ext" = ".la"; then
+                 found=yes
+               else
+                 found=no
+               fi
+               break 2
+             fi
+           done
+         done
+         if test "$found" != yes; then
+           # deplib doesn't seem to be a libtool library
+           if test "$linkmode,$pass" = "prog,link"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
+         else # deplib is a libtool library
+           # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+           # We need to do some special things here, and not later.
+           if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             case " $predeps $postdeps " in
+             *" $deplib "*)
+               if func_lalib_p "$lib"; then
+                 library_names=
+                 old_library=
+                 func_source "$lib"
+                 for l in $old_library $library_names; do
+                   ll="$l"
+                 done
+                 if test "X$ll" = "X$old_library" ; then # only static version available
+                   found=no
+                   func_dirname "$lib" "" "."
+                   ladir="$func_dirname_result"
+                   lib=$ladir/$old_library
+                   if test "$linkmode,$pass" = "prog,link"; then
+                     compile_deplibs="$deplib $compile_deplibs"
+                     finalize_deplibs="$deplib $finalize_deplibs"
+                   else
+                     deplibs="$deplib $deplibs"
+                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                   fi
+                   continue
+                 fi
+               fi
+               ;;
+             *) ;;
+             esac
+           fi
+         fi
+         ;; # -l
+       *.ltframework)
+         if test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$deplib $compile_deplibs"
+           finalize_deplibs="$deplib $finalize_deplibs"
+         else
+           deplibs="$deplib $deplibs"
+           if test "$linkmode" = lib ; then
+               case "$new_inherited_linker_flags " in
+                   *" $deplib "*) ;;
+                   * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
+               esac
+           fi
+         fi
+         continue
+         ;;
+       -L*)
+         case $linkmode in
+         lib)
+           deplibs="$deplib $deplibs"
+           test "$pass" = conv && continue
+           newdependency_libs="$deplib $newdependency_libs"
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         prog)
+           if test "$pass" = conv; then
+             deplibs="$deplib $deplibs"
+             continue
+           fi
+           if test "$pass" = scan; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           func_stripname '-L' '' "$deplib"
+           newlib_search_path="$newlib_search_path $func_stripname_result"
+           ;;
+         *)
+           func_warning "\`-L' is ignored for archives/objects"
+           ;;
+         esac # linkmode
+         continue
+         ;; # -L
+       -R*)
+         if test "$pass" = link; then
+           func_stripname '-R' '' "$deplib"
+           dir=$func_stripname_result
+           # Make sure the xrpath contains only unique directories.
+           case "$xrpath " in
+           *" $dir "*) ;;
+           *) xrpath="$xrpath $dir" ;;
+           esac
+         fi
+         deplibs="$deplib $deplibs"
+         continue
+         ;;
+       *.la) lib="$deplib" ;;
+       *.$libext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+           continue
+         fi
+         case $linkmode in
+         lib)
+           # Linking convenience modules into shared libraries is allowed,
+           # but linking other static libraries is non-portable.
+           case " $dlpreconveniencelibs " in
+           *" $deplib "*) ;;
+           *)
+             valid_a_lib=no
+             case $deplibs_check_method in
+               match_pattern*)
+                 set dummy $deplibs_check_method; shift
+                 match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+                 if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
+                   | $EGREP "$match_pattern_regex" > /dev/null; then
+                   valid_a_lib=yes
+                 fi
+               ;;
+               pass_all)
+                 valid_a_lib=yes
+               ;;
+             esac
+             if test "$valid_a_lib" != yes; then
+               $ECHO
+               $ECHO "*** Warning: Trying to link with static lib archive $deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because the file extensions .$libext of this argument makes me believe"
+               $ECHO "*** that it is just a static archive that I should not use here."
+             else
+               $ECHO
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             fi
+             ;;
+           esac
+           continue
+           ;;
+         prog)
+           if test "$pass" != link; then
+             deplibs="$deplib $deplibs"
+           else
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           fi
+           continue
+           ;;
+         esac # linkmode
+         ;; # *.$libext
+       *.lo | *.$objext)
+         if test "$pass" = conv; then
+           deplibs="$deplib $deplibs"
+         elif test "$linkmode" = prog; then
+           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+             # If there is no dlopen support or we're linking statically,
+             # we need to preload.
+             newdlprefiles="$newdlprefiles $deplib"
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             newdlfiles="$newdlfiles $deplib"
+           fi
+         fi
+         continue
+         ;;
+       %DEPLIBS%)
+         alldeplibs=yes
+         continue
+         ;;
+       esac # case $deplib
+
+       if test "$found" = yes || test -f "$lib"; then :
+       else
+         func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
+       fi
+
+       # Check to see that this really is a libtool archive.
+       func_lalib_unsafe_p "$lib" \
+         || func_fatal_error "\`$lib' is not a valid libtool archive"
+
+       func_dirname "$lib" "" "."
+       ladir="$func_dirname_result"
+
+       dlname=
+       dlopen=
+       dlpreopen=
+       libdir=
+       library_names=
+       old_library=
+       inherited_linker_flags=
+       # If the library was installed with an old release of libtool,
+       # it will not redefine variables installed, or shouldnotlink
+       installed=yes
+       shouldnotlink=no
+       avoidtemprpath=
+
+
+       # Read the .la file
+       func_source "$lib"
+
+       # Convert "-framework foo" to "foo.ltframework"
+       if test -n "$inherited_linker_flags"; then
+         tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
+         for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+           case " $new_inherited_linker_flags " in
+             *" $tmp_inherited_linker_flag "*) ;;
+             *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
+           esac
+         done
+       fi
+       dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       if test "$linkmode,$pass" = "lib,link" ||
+          test "$linkmode,$pass" = "prog,scan" ||
+          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+       fi
+
+       if test "$pass" = conv; then
+         # Only check for convenience libraries
+         deplibs="$lib $deplibs"
+         if test -z "$libdir"; then
+           if test -z "$old_library"; then
+             func_fatal_error "cannot find name of link library for \`$lib'"
+           fi
+           # It is a libtool convenience library, so add in its objects.
+           convenience="$convenience $ladir/$objdir/$old_library"
+           old_convenience="$old_convenience $ladir/$objdir/$old_library"
+           tmp_libs=
+           for deplib in $dependency_libs; do
+             deplibs="$deplib $deplibs"
+             if $opt_duplicate_deps ; then
+               case "$tmp_libs " in
+               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+               esac
+             fi
+             tmp_libs="$tmp_libs $deplib"
+           done
+         elif test "$linkmode" != prog && test "$linkmode" != lib; then
+           func_fatal_error "\`$lib' is not a convenience library"
+         fi
+         continue
+       fi # $pass = conv
+
+
+       # Get the name of the library we link against.
+       linklib=
+       for l in $old_library $library_names; do
+         linklib="$l"
+       done
+       if test -z "$linklib"; then
+         func_fatal_error "cannot find name of link library for \`$lib'"
+       fi
+
+       # This library was specified with -dlopen.
+       if test "$pass" = dlopen; then
+         if test -z "$libdir"; then
+           func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
+         fi
+         if test -z "$dlname" ||
+            test "$dlopen_support" != yes ||
+            test "$build_libtool_libs" = no; then
+           # If there is no dlname, no dlopen support or we're linking
+           # statically, we need to preload.  We also need to preload any
+           # dependent libraries so libltdl's deplib preloader doesn't
+           # bomb out in the load deplibs phase.
+           dlprefiles="$dlprefiles $lib $dependency_libs"
+         else
+           newdlfiles="$newdlfiles $lib"
+         fi
+         continue
+       fi # $pass = dlopen
+
+       # We need an absolute path.
+       case $ladir in
+       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       *)
+         abs_ladir=`cd "$ladir" && pwd`
+         if test -z "$abs_ladir"; then
+           func_warning "cannot determine absolute directory name of \`$ladir'"
+           func_warning "passing it literally to the linker, although it might fail"
+           abs_ladir="$ladir"
+         fi
+         ;;
+       esac
+       func_basename "$lib"
+       laname="$func_basename_result"
+
+       # Find the relevant object directory and library name.
+       if test "X$installed" = Xyes; then
+         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           func_warning "library \`$lib' was moved."
+           dir="$ladir"
+           absdir="$abs_ladir"
+           libdir="$abs_ladir"
+         else
+           dir="$libdir"
+           absdir="$libdir"
+         fi
+         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+       else
+         if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+           dir="$ladir"
+           absdir="$abs_ladir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         else
+           dir="$ladir/$objdir"
+           absdir="$abs_ladir/$objdir"
+           # Remove this search path later
+           notinst_path="$notinst_path $abs_ladir"
+         fi
+       fi # $installed = yes
+       func_stripname 'lib' '.la' "$laname"
+       name=$func_stripname_result
+
+       # This library was specified with -dlpreopen.
+       if test "$pass" = dlpreopen; then
+         if test -z "$libdir" && test "$linkmode" = prog; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
+         fi
+         # Prefer using a static library (so that no silly _DYNAMIC symbols
+         # are required to link).
+         if test -n "$old_library"; then
+           newdlprefiles="$newdlprefiles $dir/$old_library"
+           # Keep a list of preopened convenience libraries to check
+           # that they are being used correctly in the link pass.
+           test -z "$libdir" && \
+               dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
+         # Otherwise, use the dlname, so that lt_dlopen finds it.
+         elif test -n "$dlname"; then
+           newdlprefiles="$newdlprefiles $dir/$dlname"
+         else
+           newdlprefiles="$newdlprefiles $dir/$linklib"
+         fi
+       fi # $pass = dlpreopen
+
+       if test -z "$libdir"; then
+         # Link the convenience library
+         if test "$linkmode" = lib; then
+           deplibs="$dir/$old_library $deplibs"
+         elif test "$linkmode,$pass" = "prog,link"; then
+           compile_deplibs="$dir/$old_library $compile_deplibs"
+           finalize_deplibs="$dir/$old_library $finalize_deplibs"
+         else
+           deplibs="$lib $deplibs" # used for prog,scan pass
+         fi
+         continue
+       fi
+
+
+       if test "$linkmode" = prog && test "$pass" != link; then
+         newlib_search_path="$newlib_search_path $ladir"
+         deplibs="$lib $deplibs"
+
+         linkalldeplibs=no
+         if test "$link_all_deplibs" != no || test -z "$library_names" ||
+            test "$build_libtool_libs" = no; then
+           linkalldeplibs=yes
+         fi
+
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           case $deplib in
+           -L*) func_stripname '-L' '' "$deplib"
+                newlib_search_path="$newlib_search_path $func_stripname_result"
+                ;;
+           esac
+           # Need to link against all dependency_libs?
+           if test "$linkalldeplibs" = yes; then
+             deplibs="$deplib $deplibs"
+           else
+             # Need to hardcode shared library paths
+             # or/and link against static libraries
+             newdependency_libs="$deplib $newdependency_libs"
+           fi
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done # for deplib
+         continue
+       fi # $linkmode = prog...
+
+       if test "$linkmode,$pass" = "prog,link"; then
+         if test -n "$library_names" &&
+            { { test "$prefer_static_libs" = no ||
+                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+              test -z "$old_library"; }; then
+           # We need to hardcode the library path
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+             # Make sure the rpath contains only unique directories.
+             case "$temp_rpath:" in
+             *"$absdir:"*) ;;
+             *) temp_rpath="$temp_rpath$absdir:" ;;
+             esac
+           fi
+
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi # $linkmode,$pass = prog,link...
+
+         if test "$alldeplibs" = yes &&
+            { test "$deplibs_check_method" = pass_all ||
+              { test "$build_libtool_libs" = yes &&
+                test -n "$library_names"; }; }; then
+           # We only need to search for static libraries
+           continue
+         fi
+       fi
+
+       link_static=no # Whether the deplib will be linked statically
+       use_static_libs=$prefer_static_libs
+       if test "$use_static_libs" = built && test "$installed" = yes; then
+         use_static_libs=no
+       fi
+       if test -n "$library_names" &&
+          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+         case $host in
+         *cygwin* | *mingw* | *cegcc*)
+             # No point in relinking DLLs because paths are not encoded
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=no
+           ;;
+         *)
+           if test "$installed" = no; then
+             notinst_deplibs="$notinst_deplibs $lib"
+             need_relink=yes
+           fi
+           ;;
+         esac
+         # This is a shared library
+
+         # Warn about portability, can't link against -module's on some
+         # systems (darwin).  Don't bleat about dlopened modules though!
+         dlopenmodule=""
+         for dlpremoduletest in $dlprefiles; do
+           if test "X$dlpremoduletest" = "X$lib"; then
+             dlopenmodule="$dlpremoduletest"
+             break
+           fi
+         done
+         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+           $ECHO
+           if test "$linkmode" = prog; then
+             $ECHO "*** Warning: Linking the executable $output against the loadable module"
+           else
+             $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+           fi
+           $ECHO "*** $linklib is not portable!"
+         fi
+         if test "$linkmode" = lib &&
+            test "$hardcode_into_libs" = yes; then
+           # Hardcode the library path.
+           # Skip directories that are in the system default run-time
+           # search path.
+           case " $sys_lib_dlsearch_path " in
+           *" $absdir "*) ;;
+           *)
+             case "$compile_rpath " in
+             *" $absdir "*) ;;
+             *) compile_rpath="$compile_rpath $absdir"
+             esac
+             ;;
+           esac
+           case " $sys_lib_dlsearch_path " in
+           *" $libdir "*) ;;
+           *)
+             case "$finalize_rpath " in
+             *" $libdir "*) ;;
+             *) finalize_rpath="$finalize_rpath $libdir"
+             esac
+             ;;
+           esac
+         fi
+
+         if test -n "$old_archive_from_expsyms_cmds"; then
+           # figure out the soname
+           set dummy $library_names
+           shift
+           realname="$1"
+           shift
+           libname=`eval "\\$ECHO \"$libname_spec\""`
+           # use dlname if we got it. it's perfectly good, no?
+           if test -n "$dlname"; then
+             soname="$dlname"
+           elif test -n "$soname_spec"; then
+             # bleh windows
+             case $host in
+             *cygwin* | mingw* | *cegcc*)
+               func_arith $current - $age
+               major=$func_arith_result
+               versuffix="-$major"
+               ;;
+             esac
+             eval soname=\"$soname_spec\"
+           else
+             soname="$realname"
+           fi
+
+           # Make a new name for the extract_expsyms_cmds to use
+           soroot="$soname"
+           func_basename "$soroot"
+           soname="$func_basename_result"
+           func_stripname 'lib' '.dll' "$soname"
+           newlib=libimp-$func_stripname_result.a
+
+           # If the library has no export list, then create one now
+           if test -f "$output_objdir/$soname-def"; then :
+           else
+             func_verbose "extracting exported symbol list from \`$soname'"
+             func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+           fi
+
+           # Create $newlib
+           if test -f "$output_objdir/$newlib"; then :; else
+             func_verbose "generating import library for \`$soname'"
+             func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+           fi
+           # make sure the library variables are pointing to the new library
+           dir=$output_objdir
+           linklib=$newlib
+         fi # test -n "$old_archive_from_expsyms_cmds"
+
+         if test "$linkmode" = prog || test "$mode" != relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           lib_linked=yes
+           case $hardcode_action in
+           immediate | unsupported)
+             if test "$hardcode_direct" = no; then
+               add="$dir/$linklib"
+               case $host in
+                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
+                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+                   *-*-unixware7*) add_dir="-L$dir" ;;
+                 *-*-darwin* )
+                   # if the lib is a (non-dlopened) module then we can not
+                   # link against it, someone is ignoring the earlier warnings
+                   if /usr/bin/file -L $add 2> /dev/null |
+                        $GREP ": [^:]* bundle" >/dev/null ; then
+                     if test "X$dlopenmodule" != "X$lib"; then
+                       $ECHO "*** Warning: lib $linklib is a module, not a shared library"
+                       if test -z "$old_library" ; then
+                         $ECHO
+                         $ECHO "*** And there doesn't seem to be a static archive available"
+                         $ECHO "*** The link will probably fail, sorry"
+                       else
+                         add="$dir/$old_library"
+                       fi
+                     elif test -n "$old_library"; then
+                       add="$dir/$old_library"
+                     fi
+                   fi
+               esac
+             elif test "$hardcode_minus_L" = no; then
+               case $host in
+               *-*-sunos*) add_shlibpath="$dir" ;;
+               esac
+               add_dir="-L$dir"
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = no; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           relink)
+             if test "$hardcode_direct" = yes &&
+                test "$hardcode_direct_absolute" = no; then
+               add="$dir/$linklib"
+             elif test "$hardcode_minus_L" = yes; then
+               add_dir="-L$dir"
+               # Try looking first in the location we're being installed to.
+               if test -n "$inst_prefix_dir"; then
+                 case $libdir in
+                   [\\/]*)
+                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                     ;;
+                 esac
+               fi
+               add="-l$name"
+             elif test "$hardcode_shlibpath_var" = yes; then
+               add_shlibpath="$dir"
+               add="-l$name"
+             else
+               lib_linked=no
+             fi
+             ;;
+           *) lib_linked=no ;;
+           esac
+
+           if test "$lib_linked" != yes; then
+             func_fatal_configuration "unsupported hardcode properties"
+           fi
+
+           if test -n "$add_shlibpath"; then
+             case :$compile_shlibpath: in
+             *":$add_shlibpath:"*) ;;
+             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+             esac
+           fi
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+             test -n "$add" && compile_deplibs="$add $compile_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+             if test "$hardcode_direct" != yes &&
+                test "$hardcode_minus_L" != yes &&
+                test "$hardcode_shlibpath_var" = yes; then
+               case :$finalize_shlibpath: in
+               *":$libdir:"*) ;;
+               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+               esac
+             fi
+           fi
+         fi
+
+         if test "$linkmode" = prog || test "$mode" = relink; then
+           add_shlibpath=
+           add_dir=
+           add=
+           # Finalize command for both is simple: just hardcode it.
+           if test "$hardcode_direct" = yes &&
+              test "$hardcode_direct_absolute" = no; then
+             add="$libdir/$linklib"
+           elif test "$hardcode_minus_L" = yes; then
+             add_dir="-L$libdir"
+             add="-l$name"
+           elif test "$hardcode_shlibpath_var" = yes; then
+             case :$finalize_shlibpath: in
+             *":$libdir:"*) ;;
+             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+             esac
+             add="-l$name"
+           elif test "$hardcode_automatic" = yes; then
+             if test -n "$inst_prefix_dir" &&
+                test -f "$inst_prefix_dir$libdir/$linklib" ; then
+               add="$inst_prefix_dir$libdir/$linklib"
+             else
+               add="$libdir/$linklib"
+             fi
+           else
+             # We cannot seem to hardcode it, guess we'll fake it.
+             add_dir="-L$libdir"
+             # Try looking first in the location we're being installed to.
+             if test -n "$inst_prefix_dir"; then
+               case $libdir in
+                 [\\/]*)
+                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
+                   ;;
+               esac
+             fi
+             add="-l$name"
+           fi
+
+           if test "$linkmode" = prog; then
+             test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+             test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+           else
+             test -n "$add_dir" && deplibs="$add_dir $deplibs"
+             test -n "$add" && deplibs="$add $deplibs"
+           fi
+         fi
+       elif test "$linkmode" = prog; then
+         # Here we assume that one of hardcode_direct or hardcode_minus_L
+         # is not unsupported.  This is valid on all known static and
+         # shared platforms.
+         if test "$hardcode_direct" != unsupported; then
+           test -n "$old_library" && linklib="$old_library"
+           compile_deplibs="$dir/$linklib $compile_deplibs"
+           finalize_deplibs="$dir/$linklib $finalize_deplibs"
+         else
+           compile_deplibs="-l$name -L$dir $compile_deplibs"
+           finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+         fi
+       elif test "$build_libtool_libs" = yes; then
+         # Not a shared library
+         if test "$deplibs_check_method" != pass_all; then
+           # We're trying link a shared library against a static one
+           # but the system doesn't support it.
+
+           # Just print a warning and add the library to dependency_libs so
+           # that the program can be linked against the static library.
+           $ECHO
+           $ECHO "*** Warning: This system can not link to static lib archive $lib."
+           $ECHO "*** I have the capability to make that library automatically link in when"
+           $ECHO "*** you link to this library.  But I can only do this if you have a"
+           $ECHO "*** shared version of the library, which you do not appear to have."
+           if test "$module" = yes; then
+             $ECHO "*** But as you try to build a module library, libtool will still create "
+             $ECHO "*** a static module, that should work as long as the dlopening application"
+             $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
+             if test -z "$global_symbol_pipe"; then
+               $ECHO
+               $ECHO "*** However, this would only work if libtool was able to extract symbol"
+               $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+               $ECHO "*** not find such a program.  So, this module is probably useless."
+               $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+             fi
+             if test "$build_old_libs" = no; then
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         else
+           deplibs="$dir/$old_library $deplibs"
+           link_static=yes
+         fi
+       fi # link shared/static library?
+
+       if test "$linkmode" = lib; then
+         if test -n "$dependency_libs" &&
+            { test "$hardcode_into_libs" != yes ||
+              test "$build_old_libs" = yes ||
+              test "$link_static" = yes; }; then
+           # Extract -R from dependency_libs
+           temp_deplibs=
+           for libdir in $dependency_libs; do
+             case $libdir in
+             -R*) func_stripname '-R' '' "$libdir"
+                  temp_xrpath=$func_stripname_result
+                  case " $xrpath " in
+                  *" $temp_xrpath "*) ;;
+                  *) xrpath="$xrpath $temp_xrpath";;
+                  esac;;
+             *) temp_deplibs="$temp_deplibs $libdir";;
+             esac
+           done
+           dependency_libs="$temp_deplibs"
+         fi
+
+         newlib_search_path="$newlib_search_path $absdir"
+         # Link against this library
+         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         # ... and its dependency_libs
+         tmp_libs=
+         for deplib in $dependency_libs; do
+           newdependency_libs="$deplib $newdependency_libs"
+           if $opt_duplicate_deps ; then
+             case "$tmp_libs " in
+             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+             esac
+           fi
+           tmp_libs="$tmp_libs $deplib"
+         done
+
+         if test "$link_all_deplibs" != no; then
+           # Add the search paths of all dependency libraries
+           for deplib in $dependency_libs; do
+             path=
+             case $deplib in
+             -L*) path="$deplib" ;;
+             *.la)
+               func_dirname "$deplib" "" "."
+               dir="$func_dirname_result"
+               # We need an absolute path.
+               case $dir in
+               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               *)
+                 absdir=`cd "$dir" && pwd`
+                 if test -z "$absdir"; then
+                   func_warning "cannot determine absolute directory name of \`$dir'"
+                   absdir="$dir"
+                 fi
+                 ;;
+               esac
+               if $GREP "^installed=no" $deplib > /dev/null; then
+               case $host in
+               *-*-darwin*)
+                 depdepl=
+                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+                 if test -n "$deplibrary_names" ; then
+                   for tmp in $deplibrary_names ; do
+                     depdepl=$tmp
+                   done
+                   if test -f "$absdir/$objdir/$depdepl" ; then
+                     depdepl="$absdir/$objdir/$depdepl"
+                     darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`${OTOOL64} -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+                     compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
+                     linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
+                     path=
+                   fi
+                 fi
+                 ;;
+               *)
+                 path="-L$absdir/$objdir"
+                 ;;
+               esac
+               else
+                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 test -z "$libdir" && \
+                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 test "$absdir" != "$libdir" && \
+                   func_warning "\`$deplib' seems to be moved"
+
+                 path="-L$absdir"
+               fi
+               ;;
+             esac
+             case " $deplibs " in
+             *" $path "*) ;;
+             *) deplibs="$path $deplibs" ;;
+             esac
+           done
+         fi # link_all_deplibs != no
+       fi # linkmode = lib
+      done # for deplib in $libs
+      if test "$pass" = link; then
+       if test "$linkmode" = "prog"; then
+         compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+         finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+       else
+         compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       fi
+      fi
+      dependency_libs="$newdependency_libs"
+      if test "$pass" = dlpreopen; then
+       # Link the dlpreopened libraries before other libraries
+       for deplib in $save_deplibs; do
+         deplibs="$deplib $deplibs"
+       done
+      fi
+      if test "$pass" != dlopen; then
+       if test "$pass" != conv; then
+         # Make sure lib_search_path contains only unique directories.
+         lib_search_path=
+         for dir in $newlib_search_path; do
+           case "$lib_search_path " in
+           *" $dir "*) ;;
+           *) lib_search_path="$lib_search_path $dir" ;;
+           esac
+         done
+         newlib_search_path=
+       fi
+
+       if test "$linkmode,$pass" != "prog,link"; then
+         vars="deplibs"
+       else
+         vars="compile_deplibs finalize_deplibs"
+       fi
+       for var in $vars dependency_libs; do
+         # Add libraries to $var in reverse order
+         eval tmp_libs=\"\$$var\"
+         new_libs=
+         for deplib in $tmp_libs; do
+           # FIXME: Pedantically, this is the right thing to do, so
+           #        that some nasty dependency loop isn't accidentally
+           #        broken:
+           #new_libs="$deplib $new_libs"
+           # Pragmatically, this seems to cause very few problems in
+           # practice:
+           case $deplib in
+           -L*) new_libs="$deplib $new_libs" ;;
+           -R*) ;;
+           *)
+             # And here is the reason: when a library appears more
+             # than once as an explicit dependence of a library, or
+             # is implicitly linked in more than once by the
+             # compiler, it is considered special, and multiple
+             # occurrences thereof are not removed.  Compare this
+             # with having the same library being listed as a
+             # dependency of multiple other libraries: in this case,
+             # we know (pedantically, we assume) the library does not
+             # need to be listed more than once, so we keep only the
+             # last copy.  This is not always right, but it is rare
+             # enough that we require users that really mean to play
+             # such unportable linking tricks to link the library
+             # using -Wl,-lname, so that libtool does not consider it
+             # for duplicate removal.
+             case " $specialdeplibs " in
+             *" $deplib "*) new_libs="$deplib $new_libs" ;;
+             *)
+               case " $new_libs " in
+               *" $deplib "*) ;;
+               *) new_libs="$deplib $new_libs" ;;
+               esac
+               ;;
+             esac
+             ;;
+           esac
+         done
+         tmp_libs=
+         for deplib in $new_libs; do
+           case $deplib in
+           -L*)
+             case " $tmp_libs " in
+             *" $deplib "*) ;;
+             *) tmp_libs="$tmp_libs $deplib" ;;
+             esac
+             ;;
+           *) tmp_libs="$tmp_libs $deplib" ;;
+           esac
+         done
+         eval $var=\"$tmp_libs\"
+       done # for var
+      fi
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs ; do
+       case " $predeps $postdeps $compiler_lib_search_path " in
+       *" $i "*)
+         i=""
+         ;;
+       esac
+       if test -n "$i" ; then
+         tmp_libs="$tmp_libs $i"
+       fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test "$linkmode" = prog; then
+      dlfiles="$newdlfiles"
+    fi
+    if test "$linkmode" = prog || test "$linkmode" = lib; then
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+       func_warning "\`-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+       func_stripname 'lib' '.la' "$outputname"
+       name=$func_stripname_result
+       eval shared_ext=\"$shrext_cmds\"
+       eval libname=\"$libname_spec\"
+       ;;
+      *)
+       test "$module" = no && \
+         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+
+       if test "$need_lib_prefix" != no; then
+         # Add the "lib" prefix for modules if required
+         func_stripname '' '.la' "$outputname"
+         name=$func_stripname_result
+         eval shared_ext=\"$shrext_cmds\"
+         eval libname=\"$libname_spec\"
+       else
+         func_stripname '' '.la' "$outputname"
+         libname=$func_stripname_result
+       fi
+       ;;
+      esac
+
+      if test -n "$objs"; then
+       if test "$deplibs_check_method" != pass_all; then
+         func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
+       else
+         $ECHO
+         $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+         $ECHO "*** objects $objs is not portable!"
+         libobjs="$libobjs $objs"
+       fi
+      fi
+
+      test "$dlself" != no && \
+       func_warning "\`-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test "$#" -gt 1 && \
+       func_warning "ignoring multiple \`-rpath's for a libtool library"
+
+      install_libdir="$1"
+
+      oldlibs=
+      if test -z "$rpath"; then
+       if test "$build_libtool_libs" = yes; then
+         # Building a libtool convenience library.
+         # Some compilers have problems with a `.al' extension so
+         # convenience libraries should have the same extension an
+         # archive normally would.
+         oldlibs="$output_objdir/$libname.$libext $oldlibs"
+         build_libtool_libs=convenience
+         build_old_libs=yes
+       fi
+
+       test -n "$vinfo" && \
+         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+
+       test -n "$release" && \
+         func_warning "\`-release' is ignored for convenience libraries"
+      else
+
+       # Parse the version information argument.
+       save_ifs="$IFS"; IFS=':'
+       set dummy $vinfo 0 0 0
+       shift
+       IFS="$save_ifs"
+
+       test -n "$7" && \
+         func_fatal_help "too many parameters to \`-version-info'"
+
+       # convert absolute version numbers to libtool ages
+       # this retains compatibility with .la files and attempts
+       # to make the code below a bit more comprehensible
+
+       case $vinfo_number in
+       yes)
+         number_major="$1"
+         number_minor="$2"
+         number_revision="$3"
+         #
+         # There are really only two kinds -- those that
+         # use the current revision as the major version
+         # and those that subtract age and use age as
+         # a minor version.  But, then there is irix
+         # which has an extra 1 added just for fun
+         #
+         case $version_type in
+         darwin|linux|osf|windows|none)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_revision"
+           ;;
+         freebsd-aout|freebsd-elf|sunos)
+           current="$number_major"
+           revision="$number_minor"
+           age="0"
+           ;;
+         irix|nonstopux)
+           func_arith $number_major + $number_minor
+           current=$func_arith_result
+           age="$number_minor"
+           revision="$number_minor"
+           lt_irix_increment=no
+           ;;
+         *)
+           func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+           ;;
+         esac
+         ;;
+       no)
+         current="$1"
+         revision="$2"
+         age="$3"
+         ;;
+       esac
+
+       # Check that each of the things are valid numbers.
+       case $current in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "CURRENT \`$current' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $revision in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "REVISION \`$revision' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       case $age in
+       0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+       *)
+         func_error "AGE \`$age' must be a nonnegative integer"
+         func_fatal_error "\`$vinfo' is not valid version information"
+         ;;
+       esac
+
+       if test "$age" -gt "$current"; then
+         func_error "AGE \`$age' is greater than the current interface number \`$current'"
+         func_fatal_error "\`$vinfo' is not valid version information"
+       fi
+
+       # Calculate the version variables.
+       major=
+       versuffix=
+       verstring=
+       case $version_type in
+       none) ;;
+
+       darwin)
+         # Like Linux, but with the current version available in
+         # verstring for coding it into the library header
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         # Darwin ld doesn't like 0 for these options...
+         func_arith $current + 1
+         minor_current=$func_arith_result
+         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
+         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+         ;;
+
+       freebsd-aout)
+         major=".$current"
+         versuffix=".$current.$revision";
+         ;;
+
+       freebsd-elf)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       irix | nonstopux)
+         if test "X$lt_irix_increment" = "Xno"; then
+           func_arith $current - $age
+         else
+           func_arith $current - $age + 1
+         fi
+         major=$func_arith_result
+
+         case $version_type in
+           nonstopux) verstring_prefix=nonstopux ;;
+           *)         verstring_prefix=sgi ;;
+         esac
+         verstring="$verstring_prefix$major.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$revision
+         while test "$loop" -ne 0; do
+           func_arith $revision - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring_prefix$major.$iface:$verstring"
+         done
+
+         # Before this point, $major must not contain `.'.
+         major=.$major
+         versuffix="$major.$revision"
+         ;;
+
+       linux)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix="$major.$age.$revision"
+         ;;
+
+       osf)
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=".$current.$age.$revision"
+         verstring="$current.$age.$revision"
+
+         # Add in all the interfaces that we are compatible with.
+         loop=$age
+         while test "$loop" -ne 0; do
+           func_arith $current - $loop
+           iface=$func_arith_result
+           func_arith $loop - 1
+           loop=$func_arith_result
+           verstring="$verstring:${iface}.0"
+         done
+
+         # Make executables depend on our current version.
+         verstring="$verstring:${current}.0"
+         ;;
+
+       qnx)
+         major=".$current"
+         versuffix=".$current"
+         ;;
+
+       sunos)
+         major=".$current"
+         versuffix=".$current.$revision"
+         ;;
+
+       windows)
+         # Use '-' rather than '.', since we only want one
+         # extension on DOS 8.3 filesystems.
+         func_arith $current - $age
+         major=$func_arith_result
+         versuffix="-$major"
+         ;;
+
+       *)
+         func_fatal_configuration "unknown library version type \`$version_type'"
+         ;;
+       esac
+
+       # Clear the version info if we defaulted, and they specified a release.
+       if test -z "$vinfo" && test -n "$release"; then
+         major=
+         case $version_type in
+         darwin)
+           # we can't check for "0.0" in archive_cmds due to quoting
+           # problems, so we reset it completely
+           verstring=
+           ;;
+         *)
+           verstring="0.0"
+           ;;
+         esac
+         if test "$need_version" = no; then
+           versuffix=
+         else
+           versuffix=".0.0"
+         fi
+       fi
+
+       # Remove version info from name if versioning should be avoided
+       if test "$avoid_version" = yes && test "$need_version" = no; then
+         major=
+         versuffix=
+         verstring=""
+       fi
+
+       # Check to see if the archive will have undefined symbols.
+       if test "$allow_undefined" = yes; then
+         if test "$allow_undefined_flag" = unsupported; then
+           func_warning "undefined symbols not allowed in $host shared libraries"
+           build_libtool_libs=no
+           build_old_libs=yes
+         fi
+       else
+         # Don't allow undefined symbols.
+         allow_undefined_flag="$no_undefined_flag"
+       fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" "yes"
+      libobjs="$libobjs $symfileobj"
+      test "X$libobjs" = "X " && libobjs=
+
+      if test "$mode" != relink; then
+       # Remove our outputs, but don't remove object files since they
+       # may have been created when compiling PIC objects.
+       removelist=
+       tempremovelist=`$ECHO "$output_objdir/*"`
+       for p in $tempremovelist; do
+         case $p in
+           *.$objext | *.gcno)
+              ;;
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
+              if test "X$precious_files_regex" != "X"; then
+                if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+                then
+                  continue
+                fi
+              fi
+              removelist="$removelist $p"
+              ;;
+           *) ;;
+         esac
+       done
+       test -n "$removelist" && \
+         func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+       oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+       # Transform .lo files to .o files.
+       oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #        lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
+      #        deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
+      #        dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       temp_xrpath=
+       for libdir in $xrpath; do
+         temp_xrpath="$temp_xrpath -R$libdir"
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+         dependency_libs="$temp_xrpath $dependency_libs"
+       fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+       case " $dlprefiles $dlfiles " in
+       *" $lib "*) ;;
+       *) dlfiles="$dlfiles $lib" ;;
+       esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+       case "$dlprefiles " in
+       *" $lib "*) ;;
+       *) dlprefiles="$dlprefiles $lib" ;;
+       esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+       if test -n "$rpath"; then
+         case $host in
+         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
+           # these systems don't actually have a c library (as such)!
+           ;;
+         *-*-rhapsody* | *-*-darwin1.[012])
+           # Rhapsody C library is in the System framework
+           deplibs="$deplibs System.ltframework"
+           ;;
+         *-*-netbsd*)
+           # Don't link with libc until the a.out ld.so is fixed.
+           ;;
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+           # Do not include libc due to us having libc/libc_r.
+           ;;
+         *-*-sco3.2v5* | *-*-sco5v6*)
+           # Causes problems with __ctype
+           ;;
+         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+           # Compiler inserts libc in the correct place for threads to work
+           ;;
+         *)
+           # Add libc to deplibs on all other systems if necessary.
+           if test "$build_libtool_need_lc" = "yes"; then
+             deplibs="$deplibs -lc"
+           fi
+           ;;
+         esac
+       fi
+
+       # Transform deplibs into only deplibs that can be linked in shared.
+       name_save=$name
+       libname_save=$libname
+       release_save=$release
+       versuffix_save=$versuffix
+       major_save=$major
+       # I'm not sure if I'm treating the release correctly.  I think
+       # release should show up in the -l (ie -lgmp5) so we don't want to
+       # add it in twice.  Is that correct?
+       release=""
+       versuffix=""
+       major=""
+       newdeplibs=
+       droppeddeps=no
+       case $deplibs_check_method in
+       pass_all)
+         # Don't check for shared/static.  Everything works.
+         # This might be a little naive.  We might want to check
+         # whether the library exists or not.  But this is on
+         # osf3 & osf4 and I'm not really sure... Just
+         # implementing what was already the behavior.
+         newdeplibs=$deplibs
+         ;;
+       test_compile)
+         # This code stresses the "libraries are programs" paradigm to its
+         # limits. Maybe even breaks it.  We compile a program, linking it
+         # against the deplibs as a proxy for the library.  Then we can check
+         # whether they linked in statically or dynamically with ldd.
+         $opt_dry_run || $RM conftest.c
+         cat > conftest.c <<EOF
+         int main() { return 0; }
+EOF
+         $opt_dry_run || $RM conftest
+         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+           ldd_output=`ldd conftest`
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                 case " $predeps $postdeps " in
+                 *" $i "*)
+                   newdeplibs="$newdeplibs $i"
+                   i=""
+                   ;;
+                 esac
+               fi
+               if test -n "$i" ; then
+                 libname=`eval "\\$ECHO \"$libname_spec\""`
+                 deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                 set dummy $deplib_matches; shift
+                 deplib_match=$1
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                   newdeplibs="$newdeplibs $i"
+                 else
+                   droppeddeps=yes
+                   $ECHO
+                   $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                   $ECHO "*** I have the capability to make that library automatically link in when"
+                   $ECHO "*** you link to this library.  But I can only do this if you have a"
+                   $ECHO "*** shared version of the library, which I believe you do not have"
+                   $ECHO "*** because a test_compile did reveal that the linker did not use it for"
+                   $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
+                 fi
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         else
+           # Error occurred in the first compile.  Let's try to salvage
+           # the situation: Compile a separate program for each library.
+           for i in $deplibs; do
+             case $i in
+             -l*)
+               func_stripname -l '' "$i"
+               name=$func_stripname_result
+               $opt_dry_run || $RM conftest
+               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+                 ldd_output=`ldd conftest`
+                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+                   case " $predeps $postdeps " in
+                   *" $i "*)
+                     newdeplibs="$newdeplibs $i"
+                     i=""
+                     ;;
+                   esac
+                 fi
+                 if test -n "$i" ; then
+                   libname=`eval "\\$ECHO \"$libname_spec\""`
+                   deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+                   set dummy $deplib_matches; shift
+                   deplib_match=$1
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+                     newdeplibs="$newdeplibs $i"
+                   else
+                     droppeddeps=yes
+                     $ECHO
+                     $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+                     $ECHO "*** I have the capability to make that library automatically link in when"
+                     $ECHO "*** you link to this library.  But I can only do this if you have a"
+                     $ECHO "*** shared version of the library, which you do not appear to have"
+                     $ECHO "*** because a test_compile did reveal that the linker did not use this one"
+                     $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
+                   fi
+                 fi
+               else
+                 droppeddeps=yes
+                 $ECHO
+                 $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+                 $ECHO "*** make it link in!  You will probably need to install it or some"
+                 $ECHO "*** library that it depends on before this library will be fully"
+                 $ECHO "*** functional.  Installing it before continuing would be even better."
+               fi
+               ;;
+             *)
+               newdeplibs="$newdeplibs $i"
+               ;;
+             esac
+           done
+         fi
+         ;;
+       file_magic*)
+         set dummy $deplibs_check_method; shift
+         file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                     # Follow soft links.
+                     if ls -lLd "$potent_lib" 2>/dev/null |
+                        $GREP " -> " >/dev/null; then
+                       continue
+                     fi
+                     # The statement above tries to avoid entering an
+                     # endless loop below, in case of cyclic links.
+                     # We might still enter an endless loop, since a link
+                     # loop can be closed while we follow links,
+                     # but so what?
+                     potlib="$potent_lib"
+                     while test -h "$potlib" 2>/dev/null; do
+                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       case $potliblink in
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+                       *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+                       esac
+                     done
+                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+                        $SED -e 10q |
+                        $EGREP "$file_magic_regex" > /dev/null; then
+                       newdeplibs="$newdeplibs $a_deplib"
+                       a_deplib=""
+                       break 2
+                     fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a file magic. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       match_pattern*)
+         set dummy $deplibs_check_method; shift
+         match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+         for a_deplib in $deplibs; do
+           case $a_deplib in
+           -l*)
+             func_stripname -l '' "$a_deplib"
+             name=$func_stripname_result
+             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               case " $predeps $postdeps " in
+               *" $a_deplib "*)
+                 newdeplibs="$newdeplibs $a_deplib"
+                 a_deplib=""
+                 ;;
+               esac
+             fi
+             if test -n "$a_deplib" ; then
+               libname=`eval "\\$ECHO \"$libname_spec\""`
+               for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+                 potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+                 for potent_lib in $potential_libs; do
+                   potlib="$potent_lib" # see symlink-check above in file_magic test
+                   if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
+                      $EGREP "$match_pattern_regex" > /dev/null; then
+                     newdeplibs="$newdeplibs $a_deplib"
+                     a_deplib=""
+                     break 2
+                   fi
+                 done
+               done
+             fi
+             if test -n "$a_deplib" ; then
+               droppeddeps=yes
+               $ECHO
+               $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+               $ECHO "*** I have the capability to make that library automatically link in when"
+               $ECHO "*** you link to this library.  But I can only do this if you have a"
+               $ECHO "*** shared version of the library, which you do not appear to have"
+               $ECHO "*** because I did check the linker path looking for a file starting"
+               if test -z "$potlib" ; then
+                 $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+               else
+                 $ECHO "*** with $libname and none of the candidates passed a file format test"
+                 $ECHO "*** using a regex pattern. Last file checked: $potlib"
+               fi
+             fi
+             ;;
+           *)
+             # Add a -L argument.
+             newdeplibs="$newdeplibs $a_deplib"
+             ;;
+           esac
+         done # Gone through all deplibs.
+         ;;
+       none | unknown | *)
+         newdeplibs=""
+         tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
+             -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
+         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+           for i in $predeps $postdeps ; do
+             # can't use Xsed below, because $i might contain '/'
+             tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
+           done
+         fi
+         if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[      ]//g' |
+            $GREP . >/dev/null; then
+           $ECHO
+           if test "X$deplibs_check_method" = "Xnone"; then
+             $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
+           else
+             $ECHO "*** Warning: inter-library dependencies are not known to be supported."
+           fi
+           $ECHO "*** All declared inter-library dependencies are being dropped."
+           droppeddeps=yes
+         fi
+         ;;
+       esac
+       versuffix=$versuffix_save
+       major=$major_save
+       release=$release_save
+       libname=$libname_save
+       name=$name_save
+
+       case $host in
+       *-*-rhapsody* | *-*-darwin1.[012])
+         # On Rhapsody replace the C library with the System framework
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+         ;;
+       esac
+
+       if test "$droppeddeps" = yes; then
+         if test "$module" = yes; then
+           $ECHO
+           $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
+           $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+           $ECHO "*** a static module, that should work as long as the dlopening"
+           $ECHO "*** application is linked with the -dlopen flag."
+           if test -z "$global_symbol_pipe"; then
+             $ECHO
+             $ECHO "*** However, this would only work if libtool was able to extract symbol"
+             $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
+             $ECHO "*** not find such a program.  So, this module is probably useless."
+             $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
+           fi
+           if test "$build_old_libs" = no; then
+             oldlibs="$output_objdir/$libname.$libext"
+             build_libtool_libs=module
+             build_old_libs=yes
+           else
+             build_libtool_libs=no
+           fi
+         else
+           $ECHO "*** The inter-library dependencies that have been dropped here will be"
+           $ECHO "*** automatically added whenever a program is linked with this library"
+           $ECHO "*** or is declared to -dlopen it."
+
+           if test "$allow_undefined" = no; then
+             $ECHO
+             $ECHO "*** Since this library must not contain undefined symbols,"
+             $ECHO "*** because either the platform does not support them or"
+             $ECHO "*** it was explicitly requested with -no-undefined,"
+             $ECHO "*** libtool will only create a static version of it."
+             if test "$build_old_libs" = no; then
+               oldlibs="$output_objdir/$libname.$libext"
+               build_libtool_libs=module
+               build_old_libs=yes
+             else
+               build_libtool_libs=no
+             fi
+           fi
+         fi
+       fi
+       # Done checking deplibs!
+       deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+       *-*-darwin*)
+         newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+         ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      deplibs="$new_libs"
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+       if test "$hardcode_into_libs" = yes; then
+         # Hardcode the library paths
+         hardcode_libdirs=
+         dep_rpath=
+         rpath="$finalize_rpath"
+         test "$mode" != relink && rpath="$compile_rpath$rpath"
+         for libdir in $rpath; do
+           if test -n "$hardcode_libdir_flag_spec"; then
+             if test -n "$hardcode_libdir_separator"; then
+               if test -z "$hardcode_libdirs"; then
+                 hardcode_libdirs="$libdir"
+               else
+                 # Just accumulate the unique libdirs.
+                 case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+                 *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+                   ;;
+                 *)
+                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+                   ;;
+                 esac
+               fi
+             else
+               eval flag=\"$hardcode_libdir_flag_spec\"
+               dep_rpath="$dep_rpath $flag"
+             fi
+           elif test -n "$runpath_var"; then
+             case "$perm_rpath " in
+             *" $libdir "*) ;;
+             *) perm_rpath="$perm_rpath $libdir" ;;
+             esac
+           fi
+         done
+         # Substitute the hardcoded libdirs into the rpath.
+         if test -n "$hardcode_libdir_separator" &&
+            test -n "$hardcode_libdirs"; then
+           libdir="$hardcode_libdirs"
+           if test -n "$hardcode_libdir_flag_spec_ld"; then
+             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
+           else
+             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+           fi
+         fi
+         if test -n "$runpath_var" && test -n "$perm_rpath"; then
+           # We should set the runpath_var.
+           rpath=
+           for dir in $perm_rpath; do
+             rpath="$rpath$dir:"
+           done
+           eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+         fi
+         test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+       fi
+
+       shlibpath="$finalize_shlibpath"
+       test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       if test -n "$shlibpath"; then
+         eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+       fi
+
+       # Get the real and link names of the library.
+       eval shared_ext=\"$shrext_cmds\"
+       eval library_names=\"$library_names_spec\"
+       set dummy $library_names
+       shift
+       realname="$1"
+       shift
+
+       if test -n "$soname_spec"; then
+         eval soname=\"$soname_spec\"
+       else
+         soname="$realname"
+       fi
+       if test -z "$dlname"; then
+         dlname=$soname
+       fi
+
+       lib="$output_objdir/$realname"
+       linknames=
+       for link
+       do
+         linknames="$linknames $link"
+       done
+
+       # Use standard objects if they are pic
+       test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       test "X$libobjs" = "X " && libobjs=
+
+       delfiles=
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+         export_symbols="$output_objdir/$libname.uexp"
+         delfiles="$delfiles $export_symbols"
+       fi
+
+       orig_export_symbols=
+       case $host_os in
+       cygwin* | mingw* | cegcc*)
+         if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+           # exporting using user supplied symfile
+           if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
+             # and it's NOT already a .def file. Must figure out
+             # which of the given symbols are data symbols and tag
+             # them as such. So, trigger use of export_symbols_cmds.
+             # export_symbols gets reassigned inside the "prepare
+             # the list of exported symbols" if statement, so the
+             # include_expsyms logic still works.
+             orig_export_symbols="$export_symbols"
+             export_symbols=
+             always_export_symbols=yes
+           fi
+         fi
+         ;;
+       esac
+
+       # Prepare the list of exported symbols
+       if test -z "$export_symbols"; then
+         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+           func_verbose "generating symbol list for \`$libname.la'"
+           export_symbols="$output_objdir/$libname.exp"
+           $opt_dry_run || $RM $export_symbols
+           cmds=$export_symbols_cmds
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $cmds; do
+             IFS="$save_ifs"
+             eval cmd=\"$cmd\"
+             func_len " $cmd"
+             len=$func_len_result
+             if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+               func_show_eval "$cmd" 'exit $?'
+               skipped_export=false
+             else
+               # The command line is too long to execute in one step.
+               func_verbose "using reloadable object file for export list..."
+               skipped_export=:
+               # Break out early, otherwise skipped_export may be
+               # set to false by a later but shorter cmd.
+               break
+             fi
+           done
+           IFS="$save_ifs"
+           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+       fi
+
+       if test -n "$export_symbols" && test -n "$include_expsyms"; then
+         tmp_export_symbols="$export_symbols"
+         test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+         $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+       fi
+
+       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+         # The given exports_symbols file has to be filtered, so filter it.
+         func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+         # FIXME: $output_objdir/$libname.filter potentially contains lots of
+         # 's' commands which not all seds can handle. GNU sed should be fine
+         # though. Also, the filter scales superlinearly with the number of
+         # global variables. join(1) would be nice here, but unfortunately
+         # isn't a blessed tool.
+         $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+         delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+         export_symbols=$output_objdir/$libname.def
+         $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+       fi
+
+       tmp_deplibs=
+       for test_deplib in $deplibs; do
+         case " $convenience " in
+         *" $test_deplib "*) ;;
+         *)
+           tmp_deplibs="$tmp_deplibs $test_deplib"
+           ;;
+         esac
+       done
+       deplibs="$tmp_deplibs"
+
+       if test -n "$convenience"; then
+         if test -n "$whole_archive_flag_spec" &&
+           test "$compiler_needs_object" = yes &&
+           test -z "$libobjs"; then
+           # extract the archives, so we have objects to list.
+           # TODO: could optimize this to just extract one archive.
+           whole_archive_flag_spec=
+         fi
+         if test -n "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         else
+           gentop="$output_objdir/${outputname}x"
+           generated="$generated $gentop"
+
+           func_extract_archives $gentop $convenience
+           libobjs="$libobjs $func_extract_archives_result"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+       fi
+
+       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+         eval flag=\"$thread_safe_flag_spec\"
+         linker_flags="$linker_flags $flag"
+       fi
+
+       # Make a backup of the uninstalled library when relinking
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+       fi
+
+       # Do each of the archive commands.
+       if test "$module" = yes && test -n "$module_cmds" ; then
+         if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+           eval test_cmds=\"$module_expsym_cmds\"
+           cmds=$module_expsym_cmds
+         else
+           eval test_cmds=\"$module_cmds\"
+           cmds=$module_cmds
+         fi
+       else
+         if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+           eval test_cmds=\"$archive_expsym_cmds\"
+           cmds=$archive_expsym_cmds
+         else
+           eval test_cmds=\"$archive_cmds\"
+           cmds=$archive_cmds
+         fi
+       fi
+
+       if test "X$skipped_export" != "X:" &&
+          func_len " $test_cmds" &&
+          len=$func_len_result &&
+          test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         :
+       else
+         # The command line is too long to link in one step, link piecewise
+         # or, if using GNU ld and skipped_export is not :, use a linker
+         # script.
+
+         # Save the value of $output and $libobjs because we want to
+         # use them later.  If we have whole_archive_flag_spec, we
+         # want to use save_libobjs as it was before
+         # whole_archive_flag_spec was expanded, because we can't
+         # assume the linker understands whole_archive_flag_spec.
+         # This may have to be revisited, in case too many
+         # convenience libraries get linked in and end up exceeding
+         # the spec.
+         if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+           save_libobjs=$libobjs
+         fi
+         save_output=$output
+         output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
+
+         # Clear the reloadable object creation command queue and
+         # initialize k to one.
+         test_cmds=
+         concat_cmds=
+         objlist=
+         last_robj=
+         k=1
+
+         if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
+           output=${output_objdir}/${output_la}.lnkscript
+           func_verbose "creating GNU ld script: $output"
+           $ECHO 'INPUT (' > $output
+           for obj in $save_libobjs
+           do
+             $ECHO "$obj" >> $output
+           done
+           $ECHO ')' >> $output
+           delfiles="$delfiles $output"
+         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
+           output=${output_objdir}/${output_la}.lnk
+           func_verbose "creating linker input file list: $output"
+           : > $output
+           set x $save_libobjs
+           shift
+           firstobj=
+           if test "$compiler_needs_object" = yes; then
+             firstobj="$1 "
+             shift
+           fi
+           for obj
+           do
+             $ECHO "$obj" >> $output
+           done
+           delfiles="$delfiles $output"
+           output=$firstobj\"$file_list_spec$output\"
+         else
+           if test -n "$save_libobjs"; then
+             func_verbose "creating reloadable object files..."
+             output=$output_objdir/$output_la-${k}.$objext
+             eval test_cmds=\"$reload_cmds\"
+             func_len " $test_cmds"
+             len0=$func_len_result
+             len=$len0
+
+             # Loop over the list of objects to be linked.
+             for obj in $save_libobjs
+             do
+               func_len " $obj"
+               func_arith $len + $func_len_result
+               len=$func_arith_result
+               if test "X$objlist" = X ||
+                  test "$len" -lt "$max_cmd_len"; then
+                 func_append objlist " $obj"
+               else
+                 # The command $test_cmds is almost too long, add a
+                 # command to the queue.
+                 if test "$k" -eq 1 ; then
+                   # The first file doesn't have a previous command to add.
+                   eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
+                 else
+                   # All subsequent reloadable object files will link in
+                   # the last one created.
+                   eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
+                 fi
+                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 func_arith $k + 1
+                 k=$func_arith_result
+                 output=$output_objdir/$output_la-${k}.$objext
+                 objlist=$obj
+                 func_len " $last_robj"
+                 func_arith $len0 + $func_len_result
+                 len=$func_arith_result
+               fi
+             done
+             # Handle the remaining objects by creating one last
+             # reloadable object file.  All subsequent reloadable object
+             # files will link in the last one created.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+             fi
+             delfiles="$delfiles $output"
+
+           else
+             output=
+           fi
+
+           if ${skipped_export-false}; then
+             func_verbose "generating symbol list for \`$libname.la'"
+             export_symbols="$output_objdir/$libname.exp"
+             $opt_dry_run || $RM $export_symbols
+             libobjs=$output
+             # Append the command to create the export file.
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+             if test -n "$last_robj"; then
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+             fi
+           fi
+
+           test -n "$save_libobjs" &&
+             func_verbose "creating a temporary reloadable object file: $output"
+
+           # Loop through the commands generated above and execute them.
+           save_ifs="$IFS"; IFS='~'
+           for cmd in $concat_cmds; do
+             IFS="$save_ifs"
+             $opt_silent || {
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
+             }
+             $opt_dry_run || eval "$cmd" || {
+               lt_exit=$?
+
+               # Restore the uninstalled library and exit
+               if test "$mode" = relink; then
+                 ( cd "$output_objdir" && \
+                   $RM "${realname}T" && \
+                   $MV "${realname}U" "$realname" )
+               fi
+
+               exit $lt_exit
+             }
+           done
+           IFS="$save_ifs"
+
+           if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+             func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+             func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+           fi
+         fi
+
+          if ${skipped_export-false}; then
+           if test -n "$export_symbols" && test -n "$include_expsyms"; then
+             tmp_export_symbols="$export_symbols"
+             test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
+             $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
+           fi
+
+           if test -n "$orig_export_symbols"; then
+             # The given exports_symbols file has to be filtered, so filter it.
+             func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
+             # FIXME: $output_objdir/$libname.filter potentially contains lots of
+             # 's' commands which not all seds can handle. GNU sed should be fine
+             # though. Also, the filter scales superlinearly with the number of
+             # global variables. join(1) would be nice here, but unfortunately
+             # isn't a blessed tool.
+             $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+             delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
+             export_symbols=$output_objdir/$libname.def
+             $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+           fi
+         fi
+
+         libobjs=$output
+         # Restore the value of output.
+         output=$save_output
+
+         if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+           test "X$libobjs" = "X " && libobjs=
+         fi
+         # Expand the library linking commands again to reset the
+         # value of $libobjs for piecewise linking.
+
+         # Do each of the archive commands.
+         if test "$module" = yes && test -n "$module_cmds" ; then
+           if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+             cmds=$module_expsym_cmds
+           else
+             cmds=$module_cmds
+           fi
+         else
+           if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+             cmds=$archive_expsym_cmds
+           else
+             cmds=$archive_cmds
+           fi
+         fi
+       fi
+
+       if test -n "$delfiles"; then
+         # Append the command to remove temporary files to $cmds.
+         eval cmds=\"\$cmds~\$RM $delfiles\"
+       fi
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         libobjs="$libobjs $func_extract_archives_result"
+         test "X$libobjs" = "X " && libobjs=
+       fi
+
+       save_ifs="$IFS"; IFS='~'
+       for cmd in $cmds; do
+         IFS="$save_ifs"
+         eval cmd=\"$cmd\"
+         $opt_silent || {
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
+         }
+         $opt_dry_run || eval "$cmd" || {
+           lt_exit=$?
+
+           # Restore the uninstalled library and exit
+           if test "$mode" = relink; then
+             ( cd "$output_objdir" && \
+               $RM "${realname}T" && \
+               $MV "${realname}U" "$realname" )
+           fi
+
+           exit $lt_exit
+         }
+       done
+       IFS="$save_ifs"
+
+       # Restore the uninstalled library and exit
+       if test "$mode" = relink; then
+         $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+         if test -n "$convenience"; then
+           if test -z "$whole_archive_flag_spec"; then
+             func_show_eval '${RM}r "$gentop"'
+           fi
+         fi
+
+         exit $EXIT_SUCCESS
+       fi
+
+       # Create links to the real library.
+       for linkname in $linknames; do
+         if test "$realname" != "$linkname"; then
+           func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+         fi
+       done
+
+       # If -module or -export-dynamic was specified, set the dlname.
+       if test "$module" = yes || test "$export_dynamic" = yes; then
+         # On all known operating systems, these are identical.
+         dlname="$soname"
+       fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+       func_warning "\`-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+       func_warning "\`-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+       func_warning "\`-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for objects"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+       test -n "$objs$old_deplibs" && \
+         func_fatal_error "cannot build library object \`$output' from non-libtool objects"
+
+       libobj=$output
+       func_lo2o "$libobj"
+       obj=$func_lo2o_result
+       ;;
+      *)
+       libobj=
+       obj="$output"
+       ;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec and hope we can get by with
+      # turning comma into space..
+      wl=
+
+      if test -n "$convenience"; then
+       if test -n "$whole_archive_flag_spec"; then
+         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+         reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
+       else
+         gentop="$output_objdir/${obj}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $convenience
+         reload_conv_objs="$reload_objs $func_extract_archives_result"
+       fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+       if test -n "$gentop"; then
+         func_show_eval '${RM}r "$gentop"'
+       fi
+
+       # Create an invalid libtool object if no PIC, so that we don't
+       # accidentally link it into a program.
+       # $show "echo timestamp > $libobj"
+       # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+       exit $EXIT_SUCCESS
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+       # Only do commands if we really have different PIC objects.
+       reload_objs="$libobjs $reload_conv_objs"
+       output="$libobj"
+       func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+       func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+       *cygwin*) func_stripname '' '.exe' "$output"
+                 output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+       func_warning "\`-version-info' is ignored for programs"
+
+      test -n "$release" && \
+       func_warning "\`-release' is ignored for programs"
+
+      test "$preload" = yes \
+        && test "$dlopen_support" = unknown \
+       && test "$dlopen_self" = unknown \
+       && test "$dlopen_self_static" = unknown && \
+         func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+       # On Rhapsody replace the C library is the System framework
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
+       ;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+       # Don't allow lazy linking, it breaks C++ global constructors
+       # But is supposedly fixed on 10.4 or later (yay!).
+       if test "$tagname" = CXX ; then
+         case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+           10.[0123])
+             compile_command="$compile_command ${wl}-bind_at_load"
+             finalize_command="$finalize_command ${wl}-bind_at_load"
+           ;;
+         esac
+       fi
+       # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+       compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
+       ;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+       case " $new_libs " in
+       *" -L$path/$objdir "*) ;;
+       *)
+         case " $compile_deplibs " in
+         *" -L$path/$objdir "*)
+           new_libs="$new_libs -L$path/$objdir" ;;
+         esac
+         ;;
+       esac
+      done
+      for deplib in $compile_deplibs; do
+       case $deplib in
+       -L*)
+         case " $new_libs " in
+         *" $deplib "*) ;;
+         *) new_libs="$new_libs $deplib" ;;
+         esac
+         ;;
+       *) new_libs="$new_libs $deplib" ;;
+       esac
+      done
+      compile_deplibs="$new_libs"
+
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+       # If the user specified any rpath flags, then add them.
+       for libdir in $rpath $xrpath; do
+         # This is the magic to use -rpath.
+         case "$finalize_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_rpath="$finalize_rpath $libdir" ;;
+         esac
+       done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$perm_rpath " in
+         *" $libdir "*) ;;
+         *) perm_rpath="$perm_rpath $libdir" ;;
+         esac
+       fi
+       case $host in
+       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         case :$dllsearchpath: in
+         *":$libdir:"*) ;;
+         ::) dllsearchpath=$libdir;;
+         *) dllsearchpath="$dllsearchpath:$libdir";;
+         esac
+         case :$dllsearchpath: in
+         *":$testbindir:"*) ;;
+         ::) dllsearchpath=$testbindir;;
+         *) dllsearchpath="$dllsearchpath:$testbindir";;
+         esac
+         ;;
+       esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+       if test -n "$hardcode_libdir_flag_spec"; then
+         if test -n "$hardcode_libdir_separator"; then
+           if test -z "$hardcode_libdirs"; then
+             hardcode_libdirs="$libdir"
+           else
+             # Just accumulate the unique libdirs.
+             case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+             *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+               ;;
+             *)
+               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+               ;;
+             esac
+           fi
+         else
+           eval flag=\"$hardcode_libdir_flag_spec\"
+           rpath="$rpath $flag"
+         fi
+       elif test -n "$runpath_var"; then
+         case "$finalize_perm_rpath " in
+         *" $libdir "*) ;;
+         *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+         esac
+       fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+        test -n "$hardcode_libdirs"; then
+       libdir="$hardcode_libdirs"
+       eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath="$rpath"
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+       # Transform all the library objects into standard objects.
+       compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+       finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+       func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=yes
+      case $host in
+      *cygwin* | *mingw* )
+        if test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      *cegcc)
+        # Disable wrappers for cegcc, we are cross compiling anyway.
+        wrappers_required=no
+        ;;
+      *)
+        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
+          wrappers_required=no
+        fi
+        ;;
+      esac
+      if test "$wrappers_required" = no; then
+       # Replace the output file specification.
+       compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       link_command="$compile_command$compile_rpath"
+
+       # We have no uninstalled library dependencies, so finalize right now.
+       exit_status=0
+       func_show_eval "$link_command" 'exit_status=$?'
+
+       # Delete the generated files.
+       if test -f "$output_objdir/${outputname}S.${objext}"; then
+         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       fi
+
+       exit $exit_status
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+       compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+       finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+       if test -n "$perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+       if test -n "$finalize_perm_rpath"; then
+         # We should set the runpath_var.
+         rpath=
+         for dir in $finalize_perm_rpath; do
+           rpath="$rpath$dir:"
+         done
+         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+       fi
+      fi
+
+      if test "$no_install" = yes; then
+       # We don't need to create a wrapper script.
+       link_command="$compile_var$compile_command$compile_rpath"
+       # Replace the output file specification.
+       link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+       # Delete the old output file.
+       $opt_dry_run || $RM $output
+       # Link the executable and exit
+       func_show_eval "$link_command" 'exit $?'
+       exit $EXIT_SUCCESS
+      fi
+
+      if test "$hardcode_action" = relink; then
+       # Fast installation is not supported
+       link_command="$compile_var$compile_command$compile_rpath"
+       relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+       func_warning "this platform does not like uninstalled shared libraries"
+       func_warning "\`$output' will be relinked during installation"
+      else
+       if test "$fast_install" != no; then
+         link_command="$finalize_var$compile_command$finalize_rpath"
+         if test "$fast_install" = yes; then
+           relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+         else
+           # fast_install is set to needless
+           relink_command=
+         fi
+       else
+         link_command="$compile_var$compile_command$compile_rpath"
+         relink_command="$finalize_var$finalize_command$finalize_rpath"
+       fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+       # Preserve any variables that may affect compiler behavior
+       for var in $variables_saved_for_relink; do
+         if eval test -z \"\${$var+set}\"; then
+           relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+         elif eval var_value=\$$var; test -z "$var_value"; then
+           relink_command="$var=; export $var; $relink_command"
+         else
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+         fi
+       done
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $ECHO for shipping.
+      if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
+       case $progpath in
+       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
+       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
+       esac
+       qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+       qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+       # win32 will think the script is a binary if it has
+       # a .exe suffix, so we strip it off here.
+       case $output in
+         *.exe) func_stripname '' '.exe' "$output"
+                output=$func_stripname_result ;;
+       esac
+       # test for cygwin because mv fails w/o .exe extensions
+       case $host in
+         *cygwin*)
+           exeext=.exe
+           func_stripname '' '.exe' "$outputname"
+           outputname=$func_stripname_result ;;
+         *) exeext= ;;
+       esac
+       case $host in
+         *cygwin* | *mingw* )
+           func_dirname_and_basename "$output" "" "."
+           output_name=$func_basename_result
+           output_path=$func_dirname_result
+           cwrappersource="$output_path/$objdir/lt-$output_name.c"
+           cwrapper="$output_path/$output_name.exe"
+           $RM $cwrappersource $cwrapper
+           trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_cwrapperexe_src > $cwrappersource
+
+           # The wrapper executable is built using the $host compiler,
+           # because it contains $host paths and files. If cross-
+           # compiling, it, like the target executable, must be
+           # executed on the $host or under an emulation environment.
+           $opt_dry_run || {
+             $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+             $STRIP $cwrapper
+           }
+
+           # Now, create the wrapper script for func_source use:
+           func_ltwrapper_scriptname $cwrapper
+           $RM $func_ltwrapper_scriptname_result
+           trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+           $opt_dry_run || {
+             # note: this script will not be executed, so do not chmod.
+             if test "x$build" = "x$host" ; then
+               $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+             else
+               func_emit_wrapper no > $func_ltwrapper_scriptname_result
+             fi
+           }
+         ;;
+         * )
+           $RM $output
+           trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+           func_emit_wrapper no > $output
+           chmod +x $output
+         ;;
+       esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+       oldobjs="$libobjs_save $symfileobj"
+       addlibs="$convenience"
+       build_libtool_libs=no
+      else
+       if test "$build_libtool_libs" = module; then
+         oldobjs="$libobjs_save"
+         build_libtool_libs=no
+       else
+         oldobjs="$old_deplibs $non_pic_objects"
+         if test "$preload" = yes && test -f "$symfileobj"; then
+           oldobjs="$oldobjs $symfileobj"
+         fi
+       fi
+       addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+       gentop="$output_objdir/${outputname}x"
+       generated="$generated $gentop"
+
+       func_extract_archives $gentop $addlibs
+       oldobjs="$oldobjs $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+       cmds=$old_archive_from_new_cmds
+      else
+
+       # Add any objects from preloaded convenience libraries
+       if test -n "$dlprefiles"; then
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+
+         func_extract_archives $gentop $dlprefiles
+         oldobjs="$oldobjs $func_extract_archives_result"
+       fi
+
+       # POSIX demands no paths to be encoded in archives.  We have
+       # to avoid creating archives with duplicate basenames if we
+       # might have to extract them afterwards, e.g., when creating a
+       # static archive out of a convenience library, or when linking
+       # the entirety of a libtool archive into another (currently
+       # not supported by libtool).
+       if (for obj in $oldobjs
+           do
+             func_basename "$obj"
+             $ECHO "$func_basename_result"
+           done | sort | sort -uc >/dev/null 2>&1); then
+         :
+       else
+         $ECHO "copying selected object files to avoid basename conflicts..."
+         gentop="$output_objdir/${outputname}x"
+         generated="$generated $gentop"
+         func_mkdir_p "$gentop"
+         save_oldobjs=$oldobjs
+         oldobjs=
+         counter=1
+         for obj in $save_oldobjs
+         do
+           func_basename "$obj"
+           objbase="$func_basename_result"
+           case " $oldobjs " in
+           " ") oldobjs=$obj ;;
+           *[\ /]"$objbase "*)
+             while :; do
+               # Make sure we don't pick an alternate name that also
+               # overlaps.
+               newobj=lt$counter-$objbase
+               func_arith $counter + 1
+               counter=$func_arith_result
+               case " $oldobjs " in
+               *[\ /]"$newobj "*) ;;
+               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
+               esac
+             done
+             func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+             oldobjs="$oldobjs $gentop/$newobj"
+             ;;
+           *) oldobjs="$oldobjs $obj" ;;
+           esac
+         done
+       fi
+       eval cmds=\"$old_archive_cmds\"
+
+       func_len " $cmds"
+       len=$func_len_result
+       if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+         cmds=$old_archive_cmds
+       else
+         # the command line is too long to link in one step, link in parts
+         func_verbose "using piecewise archive linking..."
+         save_RANLIB=$RANLIB
+         RANLIB=:
+         objlist=
+         concat_cmds=
+         save_oldobjs=$oldobjs
+         oldobjs=
+         # Is there a better way of finding the last object in the list?
+         for obj in $save_oldobjs
+         do
+           last_oldobj=$obj
+         done
+         eval test_cmds=\"$old_archive_cmds\"
+         func_len " $test_cmds"
+         len0=$func_len_result
+         len=$len0
+         for obj in $save_oldobjs
+         do
+           func_len " $obj"
+           func_arith $len + $func_len_result
+           len=$func_arith_result
+           func_append objlist " $obj"
+           if test "$len" -lt "$max_cmd_len"; then
+             :
+           else
+             # the above command should be used before it gets too long
+             oldobjs=$objlist
+             if test "$obj" = "$last_oldobj" ; then
+               RANLIB=$save_RANLIB
+             fi
+             test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+             eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
+             objlist=
+             len=$len0
+           fi
+         done
+         RANLIB=$save_RANLIB
+         oldobjs=$objlist
+         if test "X$oldobjs" = "X" ; then
+           eval cmds=\"\$concat_cmds\"
+         else
+           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+         fi
+       fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+       if eval test -z \"\${$var+set}\"; then
+         relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+       elif eval var_value=\$$var; test -z "$var_value"; then
+         relink_command="$var=; export $var; $relink_command"
+       else
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+       fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      if test "$hardcode_automatic" = yes ; then
+       relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+       for installed in no yes; do
+         if test "$installed" = yes; then
+           if test -z "$install_libdir"; then
+             break
+           fi
+           output="$output_objdir/$outputname"i
+           # Replace all uninstalled libtool libraries with the installed ones
+           newdependency_libs=
+           for deplib in $dependency_libs; do
+             case $deplib in
+             *.la)
+               func_basename "$deplib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+               newdependency_libs="$newdependency_libs $libdir/$name"
+               ;;
+             *) newdependency_libs="$newdependency_libs $deplib" ;;
+             esac
+           done
+           dependency_libs="$newdependency_libs"
+           newdlfiles=
+
+           for lib in $dlfiles; do
+             case $lib in
+             *.la)
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlfiles="$newdlfiles $libdir/$name"
+               ;;
+             *) newdlfiles="$newdlfiles $lib" ;;
+             esac
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+             *.la)
+               # Only pass preopened files to the pseudo-archive (for
+               # eventual linking with the app. that links it) if we
+               # didn't already link the preopened objects directly into
+               # the library:
+               func_basename "$lib"
+               name="$func_basename_result"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+               test -z "$libdir" && \
+                 func_fatal_error "\`$lib' is not a valid libtool archive"
+               newdlprefiles="$newdlprefiles $libdir/$name"
+               ;;
+             esac
+           done
+           dlprefiles="$newdlprefiles"
+         else
+           newdlfiles=
+           for lib in $dlfiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlfiles="$newdlfiles $abs"
+           done
+           dlfiles="$newdlfiles"
+           newdlprefiles=
+           for lib in $dlprefiles; do
+             case $lib in
+               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               *) abs=`pwd`"/$lib" ;;
+             esac
+             newdlprefiles="$newdlprefiles $abs"
+           done
+           dlprefiles="$newdlprefiles"
+         fi
+         $RM $output
+         # place dlname in correct position for cygwin
+         tdlname=$dlname
+         case $host,$output,$installed,$module,$dlname in
+           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+         esac
+         $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+         if test "$installed" = no && test "$need_relink" = yes; then
+           $ECHO >> $output "\
+relink_command=\"$relink_command\""
+         fi
+       done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+{ test "$mode" = link || test "$mode" = relink; } &&
+    func_mode_link ${1+"$@"}
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $opt_debug
+    RM="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) RM="$RM $arg"; rmforce=yes ;;
+      -*) RM="$RM $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    origobjdir="$objdir"
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir="$func_dirname_result"
+      if test "X$dir" = X.; then
+       objdir="$origobjdir"
+      else
+       objdir="$dir/$origobjdir"
+      fi
+      func_basename "$file"
+      name="$func_basename_result"
+      test "$mode" = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test "$mode" = clean; then
+       case " $rmdirs " in
+         *" $objdir "*) ;;
+         *) rmdirs="$rmdirs $objdir" ;;
+       esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+        { test -h "$file"; } >/dev/null 2>&1 ||
+        test -f "$file"; then
+       :
+      elif test -d "$file"; then
+       exit_status=1
+       continue
+      elif test "$rmforce" = yes; then
+       continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+       # Possibly a libtool archive, so verify it.
+       if func_lalib_p "$file"; then
+         func_source $dir/$name
+
+         # Delete the libtool libraries and symlinks.
+         for n in $library_names; do
+           rmfiles="$rmfiles $objdir/$n"
+         done
+         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+
+         case "$mode" in
+         clean)
+           case "  $library_names " in
+           # "  " in the beginning catches empty $dlname
+           *" $dlname "*) ;;
+           *) rmfiles="$rmfiles $objdir/$dlname" ;;
+           esac
+           test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+           ;;
+         uninstall)
+           if test -n "$library_names"; then
+             # Do each command in the postuninstall commands.
+             func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+
+           if test -n "$old_library"; then
+             # Do each command in the old_postuninstall commands.
+             func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
+           fi
+           # FIXME: should reinstall the best remaining shared library.
+           ;;
+         esac
+       fi
+       ;;
+
+      *.lo)
+       # Possibly a libtool object, so verify it.
+       if func_lalib_p "$file"; then
+
+         # Read the .lo file
+         func_source $dir/$name
+
+         # Add PIC object to the list of files to remove.
+         if test -n "$pic_object" &&
+            test "$pic_object" != none; then
+           rmfiles="$rmfiles $dir/$pic_object"
+         fi
+
+         # Add non-PIC object to the list of files to remove.
+         if test -n "$non_pic_object" &&
+            test "$non_pic_object" != none; then
+           rmfiles="$rmfiles $dir/$non_pic_object"
+         fi
+       fi
+       ;;
+
+      *)
+       if test "$mode" = clean ; then
+         noexename=$name
+         case $file in
+         *.exe)
+           func_stripname '' '.exe' "$file"
+           file=$func_stripname_result
+           func_stripname '' '.exe' "$name"
+           noexename=$func_stripname_result
+           # $file with .exe has already been added to rmfiles,
+           # add $file without .exe
+           rmfiles="$rmfiles $file"
+           ;;
+         esac
+         # Do a test to see if this is a libtool program.
+         if func_ltwrapper_p "$file"; then
+           if func_ltwrapper_executable_p "$file"; then
+             func_ltwrapper_scriptname "$file"
+             relink_command=
+             func_source $func_ltwrapper_scriptname_result
+             rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
+           else
+             relink_command=
+             func_source $dir/$noexename
+           fi
+
+           # note $name still contains .exe if it was in $file originally
+           # as does the version of $file that was added into $rmfiles
+           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+           if test "$fast_install" = yes && test -n "$relink_command"; then
+             rmfiles="$rmfiles $objdir/lt-$name"
+           fi
+           if test "X$noexename" != "X$name" ; then
+             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
+           fi
+         fi
+       fi
+       ;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+    objdir="$origobjdir"
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+       func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+{ test "$mode" = uninstall || test "$mode" = clean; } &&
+    func_mode_uninstall ${1+"$@"}
+
+test -z "$mode" && {
+  help="$generic_help"
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode \`$mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# in which we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
+# vi:sw=2
+
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
new file mode 100755 (executable)
index 0000000..e631b22
--- /dev/null
@@ -0,0 +1,205 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007, 2009 Free
+# Software Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# 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 2, 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/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+  '')
+     echo "$0: No file.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification time of FILE.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "mdate-sh $scriptversion"
+    exit $?
+    ;;
+esac
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable.  Since we cannot assume `unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+  TIME_STYLE=posix-long-iso
+  export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+  ls_command='ls -L -l -d'
+else
+  ls_command='ls -l -d'
+fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+  ls_command="$ls_command -n"
+fi
+
+# A `ls -l' line looks as follows on OS/2.
+#  drwxrwx---        0 Aug 11  2001 foo
+# This differs from Unix, which adds ownership information.
+#  drwxrwx---   2 root  root      4096 Aug 11  2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month.  This cannot work with files whose owner is a
+# user named `Jan', or `Feb', etc.  However, it's unlikely that `/'
+# will be owned by a user whose name is a month.  So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`$ls_command /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+  shift
+  # Add another shift to the command.
+  command="$command shift;"
+  case $1 in
+    Jan) month=January; nummonth=1;;
+    Feb) month=February; nummonth=2;;
+    Mar) month=March; nummonth=3;;
+    Apr) month=April; nummonth=4;;
+    May) month=May; nummonth=5;;
+    Jun) month=June; nummonth=6;;
+    Jul) month=July; nummonth=7;;
+    Aug) month=August; nummonth=8;;
+    Sep) month=September; nummonth=9;;
+    Oct) month=October; nummonth=10;;
+    Nov) month=November; nummonth=11;;
+    Dec) month=December; nummonth=12;;
+  esac
+done
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+  Jan) month=January; nummonth=1;;
+  Feb) month=February; nummonth=2;;
+  Mar) month=March; nummonth=3;;
+  Apr) month=April; nummonth=4;;
+  May) month=May; nummonth=5;;
+  Jun) month=June; nummonth=6;;
+  Jul) month=July; nummonth=7;;
+  Aug) month=August; nummonth=8;;
+  Sep) month=September; nummonth=9;;
+  Oct) month=October; nummonth=10;;
+  Nov) month=November; nummonth=11;;
+  Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+  ???*) day=$1;;
+  *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+  *:*) set `date`; eval year=\$$#
+       case $2 in
+        Jan) nummonthtod=1;;
+        Feb) nummonthtod=2;;
+        Mar) nummonthtod=3;;
+        Apr) nummonthtod=4;;
+        May) nummonthtod=5;;
+        Jun) nummonthtod=6;;
+        Jul) nummonthtod=7;;
+        Aug) nummonthtod=8;;
+        Sep) nummonthtod=9;;
+        Oct) nummonthtod=10;;
+        Nov) nummonthtod=11;;
+        Dec) nummonthtod=12;;
+       esac
+       # For the first six month of the year the time notation can also
+       # be used for files modified in the last year.
+       if (expr $nummonth \> $nummonthtod) > /dev/null;
+       then
+        year=`expr $year - 1`
+       fi;;
+  *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755 (executable)
index 0000000..28055d2
--- /dev/null
@@ -0,0 +1,376 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+# 2008, 2009 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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 2, 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/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
+sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case $1 in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  autom4te     touch the output file, or create a stub one
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
+\`g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# normalize program name to check for.
+program=`echo "$1" | sed '
+  s/^gnu-//; t
+  s/^gnu//; t
+  s/^g//; t'`
+
+# Now exit if we have it, but it failed.  Also exit now if we
+# don't have it and --version was passed (most likely to detect
+# the program).  This is about non-GNU programs, so use $1 not
+# $program.
+case $1 in
+  lex*|yacc*)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar*)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case $program in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case $f in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te*)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison*|yacc*)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f y.tab.h; then
+       echo >y.tab.h
+    fi
+    if test ! -f y.tab.c; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex*|flex*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if test $# -ne 1; then
+        eval LASTARG="\${$#}"
+       case $LASTARG in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if test -f "$SRCFILE"; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if test ! -f lex.yy.c; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`Help2man' package in order for those modifications to take
+        effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit $?
+    fi
+    ;;
+
+  makeinfo*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    # The file to touch is that specified with -o ...
+    file=`echo "$*" | sed -n "$sed_output"`
+    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
+    if test -z "$file"; then
+      # ... or it is the one specified with @setfilename ...
+      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '
+       /^@setfilename/{
+         s/.* \([^ ]*\) *$/\1/
+         p
+         q
+       }' $infile`
+      # ... or it is derived from the source name (dir/f.texi becomes f.info)
+      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+    fi
+    # If the file does not exist, the user really needs makeinfo;
+    # let's fail without touching anything.
+    test -f $file || exit 1
+    touch $file
+    ;;
+
+  tar*)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case $firstarg in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case $firstarg in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/pmccabe.css b/build-aux/pmccabe.css
new file mode 100644 (file)
index 0000000..2d94c91
--- /dev/null
@@ -0,0 +1,227 @@
+body {
+
+    font-family: Helvetica, sans-serif;
+
+}
+
+.page_title {
+
+    font: 18pt Georgia, serif;
+/*    font-size: 1.5em;
+    font-weight: bold; */
+    color: darkred;
+    border-bottom: 2px solid darkred;
+}
+
+.section_title {
+
+    font: 14pt Georgia, serif;
+    color: darkred;
+    border-bottom: 2px dashed 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;
+}
+
+.sidemenu {
+    
+    border: 1px black solid;
+    padding: 5px;
+
+}
+
+.sidemenuheader {
+    color: darkred;
+    font-size: 1.1em;
+    font-weight: bold;
+    border-bottom: 1px dashed darkred;
+}
+
+.sidemenuentry {
+
+
+}
+
+.menu {
+
+}
+
diff --git a/build-aux/pmccabe2html b/build-aux/pmccabe2html
new file mode 100644 (file)
index 0000000..3f887ad
--- /dev/null
@@ -0,0 +1,907 @@
+# pmccabe2html - AWK script to convert pmccabe output to html
+
+# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+# 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/>.
+
+# Written by Jose E. Marchesi <jemarch@gnu.org>.
+# Adapted for gnulib by Simon Josefsson <simon@josefsson.org>.
+# Added support for C++ by Giuseppe Scrivano <gscrivano@gnu.org>.
+
+# Typical Invocation is from a Makefile.am:
+#
+# cyclo-$(PACKAGE).html:
+#      $(PMCCABE) ${top_srcdir}/lib/*.[ch] \
+#              | sort -nr \
+#              | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
+#                      -v lang=html -v name="$(PACKAGE_NAME)" \
+#                      -v vcurl="http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \
+#                      -v url="http://www.gnu.org/software/$(PACKAGE)/" \
+#                       -v css=${top_srcdir}/build-aux/pmccabe.css \
+#                      > $@-tmp
+#      mv $@-tmp $@
+#
+# The variables available are:
+#   lang     output language, either 'html' or 'wiki'
+#   name     project name
+#   url      link to project's home page
+#   vcurl    URL to version controlled source code browser,
+#            a %FILENAME% in the string is replaced with the relative
+#            source filename
+#   css      CSS stylesheet filename, included verbatim in HTML output
+#   css_url  link to CSS stylesheet, an URL
+
+# Prologue & configuration
+BEGIN {
+    section_global_stats_p = 1
+    section_function_cyclo_p = 1
+
+    # "html" or "wiki"
+    package_name = name
+    output_lang = lang
+
+    # General Options
+    cyclo_simple_max = 10
+    cyclo_moderate_max = 20
+    cyclo_high_max = 50
+    cut_dir = "/../"
+    source_file_link_tmpl = vcurl
+
+    # HTML options
+    if (url != "")
+    {
+       html_prolog = "<a href=\"" url "\">Back to " package_name " Homepage</a><br/><br/>"
+    }
+    html_epilog = "<hr color=\"black\" size=\"2\"/> \
+Copyright (c) 2007, 2008 Free Software Foundation, Inc."
+    html_doctype = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \
+\"http://www.w3.org/TR/html401/loose.dtd\">"
+    html_comment = "<!-- Generated by gnulib's pmccabe2html at " systime() " -->"
+    html_title = "Cyclomatic Complexity report for " package_name
+
+    # Wiki options
+    wiki_prolog = "{{Note|This page has been automatically generated}}"
+    wiki_epilog = ""
+
+    # Internal variables
+    nfuncs = 0;
+}
+
+# Functions
+
+function build_stats()
+{
+    # Maximum modified cyclo
+    for (fcn in mcyclo)
+    {
+        num_of_functions++
+        if (mcyclo[fcn] > max_mcyclo)
+        {
+            max_mcyclo = mcyclo[fcn]
+        }
+
+        if (mcyclo[fcn] > cyclo_high_max)
+        {
+            num_of_untestable_functions++
+        }
+        else if (mcyclo[fcn] > cyclo_moderate_max)
+        {
+            num_of_high_functions++
+        }
+        else if (mcyclo[fcn] > cyclo_simple_max)
+        {
+            num_of_moderate_functions++
+        }
+        else
+        {
+            num_of_simple_functions++
+        }
+    }
+}
+
+function html_fnc_table_complete (caption)
+{
+    html_fnc_table(caption, 1, 0, 1, 1, 1, 0, 1)
+}
+
+function html_fnc_table_abbrev (caption)
+{
+    html_fnc_table(caption, 1, 0, 1, 0, 1, 0, 0)
+}
+
+
+function html_fnc_table (caption,
+                         fname_p,
+                         mcyclo_p,
+                         cyclo_p,
+                         num_statements_p,
+                         num_lines_p,
+                         first_line_p,
+                         file_p)
+{
+    print "<table width=\"90%\" class=\"function_table\" cellpadding=\"0\" cellspacing=\"0\">"
+    if (caption != "")
+    {
+        print "<caption class=\"function_table_caption\">" caption "</caption>"
+    }
+    html_fnc_header(fname_p,
+                    mcyclo_p,
+                    cyclo_p,
+                    num_statements_p,
+                    num_lines_p,
+                    first_line_p,
+                    file_p)
+    for (nfnc = 1; nfnc < nfuncs; nfnc++)
+    {
+        html_fnc(nfnc,
+                 fname_p,
+                 mcyclo_p,
+                 cyclo_p,
+                 num_statements_p,
+                 num_lines_p,
+                 first_line_p,
+                 file_p)
+    }
+    print "</table>"
+}
+
+function html_header ()
+{
+    print html_doctype
+    print "<html>"
+    print html_comment
+    print "<head>"
+    print "<title>" html_title "</title>"
+    print ""
+    print "<meta name=\"description\" content=\"" html_title "\">"
+    print "<meta name=\"keywords\" content=\"" html_title "\">"
+    print "<meta name=\"resource-type\" content=\"document\">"
+    print "<meta name=\"distribution\" content=\"global\">"
+    print "<meta name=\"Generator\" content=\"pmccabe2html\">"
+    print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
+    print "<script language=\"javascript\" type=\"text/javascript\">"
+    print "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 = \"&uarr;\";\
+                       } else {\
+                               capa.style.display = \"none\";\
+                                button.innerHTML = \"&darr;\";     \
+                       }\
+               }\
+       }\
+}"
+    print "</script>"
+
+
+    if (css_url != "")
+    {
+        print "<link rel=\"stylesheet\" href=\"" css_url "\" type =\"text/css\" media=\"screen\"/>"
+    }
+    if (css != "")
+    {
+        print "<style type =\"text/css\" media=\"screen\">"
+       print "<!--"
+        while ((getline cssline < css) > 0)
+        {
+           print cssline
+       }
+        print "-->"
+       print "</style />"
+       close(css)
+    }
+    print "</head>"
+    print "<body lang=\"en\" bgcolor=\"#FFFFFF\" text=\"#000000\" link=\"#0000FF\" \
+vlink=\"#800080\" alink=\"#FF0000\">"
+}
+
+function html_footer ()
+{
+    print "</body>"
+    print "</html>"
+}
+
+function html_fnc_header (fname_p,
+                          mcyclo_p,
+                          cyclo_p,
+                          num_statements_p,
+                          num_lines_p,
+                          first_line_p,
+                          file_p)
+{
+    print "<tr class=\"function_table_header\">"
+    if (fname_p)
+    {
+        # Function name
+        print "<td class=\"function_table_header_entry\">"
+        print ""
+        print "</td>"
+
+        print "<td class=\"function_table_header_entry\">"
+        print "Function Name"
+        print "</td>"
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "<td class=\"function_table_header_entry\">"
+        print "Modified Cyclo"
+        print "</td>"
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "<td class=\"function_table_header_entry\">"
+        print "Cyclomatic"
+        print "<br/>"
+        print "Complexity"
+        print "</td>"
+    }
+    if (num_statements_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "Number of"
+        print "<br/>"
+        print "Statements"
+        print "</td>"
+    }
+    if (num_lines_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "Number of"
+        print "<br/>"
+        print "Lines"
+        print "</td>"
+    }
+    if (first_line_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "First Line"
+        print "</td>"
+    }
+    if (file_p)
+    {
+        print "<td class=\"function_table_header_entry\">"
+        print "Source File"
+        print "</td>"
+
+    }
+    print "</tr>"
+}
+
+function html_fnc (nfun,
+                   fname_p,
+                   mcyclo_p,
+                   cyclo_p,
+                   num_statements_p,
+                   num_lines_p,
+                   first_line_p,
+                   file_p)
+{
+    fname = fnames[nfun]
+
+    # Function name
+    trclass = "function_entry_simple"
+    if (mcyclo[nfun] > cyclo_high_max)
+    {
+        trclass="function_entry_untestable"
+    }
+    else if (mcyclo[nfun] > cyclo_moderate_max)
+    {
+        trclass="function_entry_high"
+    }
+    else if (mcyclo[nfun] > cyclo_simple_max)
+    {
+        trclass="function_entry_moderate"
+    }
+
+    print "<tr class=\"" trclass "\">"
+    if (fname_p)
+    {
+        print "<td class=\"function_entry_filename\">"
+        if (file_p && mcyclo[nfun] > cyclo_simple_max)
+        {
+            print "<a href=\"javascript:void(0);\" title=\"show/hide function source\" onClick=\"javascript:show_hide('" fname "_src', '" fname "_button')\">\
+<span id=\"" fname "_button\">&darr;</span></a>"
+        }
+        else
+        {
+            print "&nbsp;"
+        }
+        print "</td>"
+
+        print "<td class=\"function_entry_name\">"
+        print fname
+        print "</td>"
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "<td class=\"function_entry_cyclo\">"
+        print mcyclo[nfun]
+        print "</td>"
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "<td class=\"function_entry_cyclo\">"
+        print cyclo[nfun]
+        print "</td>"
+    }
+    if (num_statements_p)
+    {
+        # Number of statements
+        print "<td class=\"function_entry_number\">"
+        print num_statements[nfun]
+        print "</td>"
+    }
+    if (num_lines_p)
+    {
+        # Number of lines
+        print "<td class=\"function_entry_number\">"
+        print num_lines[nfun]
+        print "</td>"
+    }
+    if (first_line_p)
+    {
+        # First line
+        print "<td class=\"function_entry_number\">"
+        print first_line[nfun]
+        print "</td>"
+    }
+    if (file_p)
+    {
+        href = ""
+        if (source_file_link_tmpl != "")
+        {
+            # Get href target
+            href = source_file_link_tmpl
+            sub(/%FILENAME%/, file[nfun], href)
+        }
+
+        # Source file
+        print "<td class=\"function_entry_filename\">"
+        if (href != "")
+        {
+            print "<a href=\"" href "\">" file[nfun] "</a>"
+        }
+        else
+        {
+            print file[nfun]
+        }
+
+        print "</td>"
+
+
+        print "</tr>"
+
+        if (mcyclo[nfun] > cyclo_simple_max)
+        {
+            print "<tr>"
+
+            num_columns = 1;
+            if (fname_p) { num_columns++ }
+            if (mcyclo_p) { num_columns++ }
+            if (cyclo_p) { num_columns++ }
+            if (num_statements_p) { num_columns++ }
+            if (num_lines_p) { num_columns++ }
+            if (first_line_p) { num_columns++ }
+            if (file_p) { num_columns++ }
+
+            print "<td colspan=\"" num_columns "\" height=\"0\">"
+            print "<div id=\"" fname "_src\" class=\"function_src\" style=\"position: relative; display: none;\">"
+            print "<pre class=\"function_src\">"
+
+            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
+            {
+                sub(/\\</, "&lt;", codeline)
+                sub(/\\>/, "&gt;", codeline)
+                sub(/&/, "&amp;", codeline)
+
+                print codeline
+            }
+            close(fname nfun "_fn.txt")
+            system("rm " fname nfun "_fn.txt")
+            print "</pre>"
+            print "</div>"
+            print "</td>"
+            print "</tr>"
+        }
+
+    }
+}
+
+function html_global_stats ()
+{
+    print "<div class=\"section_title\">Resume</div>"
+
+    print "<br/>"
+    print "<table class=\"resume_table\">"
+    # Total number of functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Total number of functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_functions
+    print "</td>"
+    print "</tr>"
+    # Number of simple functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of low risk functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_simple_functions
+    print "</td>"
+    print "</tr>"
+    # Number of moderate functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of moderate risk functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_moderate_functions
+    print "</td>"
+    print "</tr>"
+    # Number of high functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of high risk functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_high_functions
+    print "</td>"
+    print "</tr>"
+    # Number of untestable functions
+    print "<tr>"
+    print "<td class=\"resume_header_entry\">"
+    print "Number of untestable functions"
+    print "</td>"
+    print "<td class=\"resume_number_entry\">"
+    print num_of_untestable_functions
+    print "</td>"
+    print "</tr>"
+    print "</table>"
+    print "<br/>"
+}
+
+function html_function_cyclo ()
+{
+    print "<div class=\"section_title\">Details for all functions</div>"
+    print "<p>Used ranges:</p>"
+
+    print "<table class=\"ranges_table\">"
+    print "<tr>"
+    print "<td class=\"ranges_header_entry\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_header_entry\">"
+    print "Cyclomatic Complexity"
+    print "</td>"
+    print "<td class=\"ranges_header_entry\">"
+    print "Risk Evaluation"
+    print "</td>"
+    print "</tr>"
+    # Simple
+    print "<tr>"
+    print "<td class=\"ranges_entry_simple\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "0 - " cyclo_simple_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "Simple module, without much risk"
+    print "</td>"
+    print "</tr>"
+    # Moderate
+    print "<tr>"
+    print "<td class=\"ranges_entry_moderate\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print cyclo_simple_max + 1 " - " cyclo_moderate_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "More complex module, moderate risk"
+    print "</td>"
+    print "</tr>"
+    # High
+    print "<tr>"
+    print "<td class=\"ranges_entry_high\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print cyclo_moderate_max + 1 " - " cyclo_high_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "Complex module, high risk"
+    print "</td>"
+    print "</tr>"
+    # Untestable
+    print "<tr>"
+    print "<td class=\"ranges_entry_untestable\">"
+    print "&nbsp;"
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "greater than " cyclo_high_max
+    print "</td>"
+    print "<td class=\"ranges_entry\">"
+    print "Untestable module, very high risk"
+    print "</td>"
+    print "</tr>"
+    print "</table>"
+    print "<br/>"
+    html_fnc_table_complete("")
+}
+
+function wiki_global_stats ()
+{
+    print "{| class=\"cyclo_resume_table\""
+    # Total number of functions
+    print "|-"
+    print "| class=\"cyclo_resume_header_entry\" | Total number of functions"
+    print "| class=\"cyclo_resume_number_entry\" |" num_of_functions
+    # Number of simple functions
+    print "|-"
+    print "| class=\"cyclo_resume_header_entry\" | Number of low risk functions"
+    print "| class=\"cyclo_resume_number_entry\" |" num_of_simple_functions
+    # Number of moderate functions
+    print "|-"
+    print "| class=\"cyclo_resume_header_entry\" | Number of moderate risk functions"
+    print "| class=\"cyclo_resume_number_entry\" |" num_of_moderate_functions
+    # Number of high functions
+    print "|-"
+    print "| class=\"cyclo_resume_header_entry\" | Number of high risk functions"
+    print "| class=\"cyclo_resume_number_entry\" |" num_of_high_functions
+    # Number of untestable functions
+    print "|-"
+    print "| class=\"cyclo_resume_header_entry\" | Number of untestable functions"
+    print "| class=\"cyclo_resume_number_entry\" |" num_of_untestable_functions
+    print "|}"
+}
+
+function wiki_function_cyclo ()
+{
+    print "==Details for all functions=="
+
+    print "Used ranges:"
+
+    print "{| class =\"cyclo_ranges_table\""
+    print "|-"
+    print "| class=\"cyclo_ranges_header_entry\" | "
+    print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity"
+    print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation"
+    # Simple
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_simple\" | "
+    print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max
+    print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk"
+    # Moderate
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_moderate\" | "
+    print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " cyclo_moderate_max
+    print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk"
+    # High
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_high\" | "
+    print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " cyclo_high_max
+    print "| class=\"cyclo_ranges_entry\" | Complex module, high risk"
+    # Untestable
+    print "|-"
+    print "| class=\"cyclo_ranges_entry_untestable\" | "
+    print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max
+    print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk"
+    print "|}"
+
+    print ""
+    print ""
+    wiki_fnc_table_complete("")
+}
+
+function wiki_fnc_table_complete (caption)
+{
+    wiki_fnc_table(caption, 1, 0, 1, 1, 1, 0, 1)
+}
+
+function wiki_fnc_table_abbrev (caption)
+{
+    wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0)
+}
+
+function wiki_fnc_table (caption,
+                         fname_p,
+                         mcyclo_p,
+                         cyclo_p,
+                         num_statements_p,
+                         num_lines_p,
+                         first_line_p,
+                         file_p)
+{
+    print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" cellspacing=\"0\">"
+    if (caption != "")
+    {
+        print "|+" caption
+    }
+    wiki_fnc_header(fname_p,
+                    mcyclo_p,
+                    cyclo_p,
+                    num_statements_p,
+                    num_lines_p,
+                    first_line_p,
+                    file_p)
+    for (nfnc = 1; nfnc < nfuncs; nfnc++)
+    {
+        wiki_fnc(nfnc,
+                 fname_p,
+                 mcyclo_p,
+                 cyclo_p,
+                 num_statements_p,
+                 num_lines_p,
+                 first_line_p,
+                 file_p)
+    }
+    print "|}"
+}
+
+function wiki_fnc_header (fname_p,
+                          mcyclo_p,
+                          cyclo_p,
+                          num_statements_p,
+                          num_lines_p,
+                          first_line_p,
+                          file_p)
+{
+    if (fname_p)
+    {
+        # Function name
+        print "! class=\"cyclo_function_table_header_entry\" | Function Name"
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo"
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic Complexity"
+    }
+    if (num_statements_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | Number of Statements"
+    }
+    if (num_lines_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | Number of Lines"
+    }
+    if (first_line_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | First Line"
+    }
+    if (file_p)
+    {
+        print "! class=\"cyclo_function_table_header_entry\" | Source File"
+    }
+}
+
+function wiki_fnc (nfnc,
+                   fname_p,
+                   mcyclo_p,
+                   cyclo_p,
+                   num_statements_p,
+                   num_lines_p,
+                   first_line_p,
+                   file_p)
+{
+   fname = fnames[nfnc]
+
+    # Function name
+    trclass = "cyclo_function_entry_simple"
+    if (mcyclo[nfnc] > cyclo_high_max)
+    {
+        trclass="cyclo_function_entry_untestable"
+    }
+    else if (mcyclo[nfnc] > cyclo_moderate_max)
+    {
+        trclass="cyclo_function_entry_high"
+    }
+    else if (mcyclo[nfnc] > cyclo_simple_max)
+    {
+        trclass="cyclo_function_entry_moderate"
+    }
+
+    print "|- class=\"" trclass "\""
+    if (fname_p)
+    {
+        print "| class=\"cyclo_function_entry_name\" |" fname
+    }
+    if (mcyclo_p)
+    {
+        # Modified cyclo
+        print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc]
+    }
+    if (cyclo_p)
+    {
+        # Cyclo
+        print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc]
+    }
+    if (num_statements_p)
+    {
+        # Number of statements
+        print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc]
+    }
+    if (num_lines_p)
+    {
+        # Number of lines
+        print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc]
+    }
+    if (first_line_p)
+    {
+        # First line
+        print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc]
+    }
+    if (file_p)
+    {
+        href = ""
+        if (source_file_link_tmpl != "")
+        {
+            # Get href target
+            href = source_file_link_tmpl
+            sub(/%FILENAME%/, file[nfnc], href)
+        }
+
+        # Source file
+        print "| class=\"cyclo_function_entry_filename\" |" \
+            ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]")
+    }
+}
+
+# Scan data from a line
+{
+    function_name = $7
+
+    nfuncs++;
+    fnames[nfuncs] = function_name
+    mcyclo[nfuncs] = $1
+    cyclo[nfuncs] = $2
+    num_statements[nfuncs] = $3
+    first_line[nfuncs] = $4
+    num_lines[nfuncs] = $5
+
+    # Build the filename from the file_spec ($6)
+    begin_util_path = index($6, cut_dir)
+    tmpfilename = substr($6, begin_util_path + length(cut_dir))
+    sub(/\([0-9]+\):/, "", tmpfilename)
+    file[nfuncs] = tmpfilename
+
+    if (mcyclo[nfuncs] > cyclo_simple_max)
+    {
+        # Extract function contents to a fn_txt file
+        filepath = $6
+
+        sub(/\([0-9]+\):/, "", filepath)
+        num_line = 0
+
+        while ((getline codeline < filepath) > 0)
+        {
+            num_line++;
+            if ((num_line >= first_line[nfuncs]) &&
+                (num_line < first_line[nfuncs] + num_lines[nfuncs]))
+            {
+                print codeline > (function_name nfuncs "_fn.txt")
+            }
+        }
+        close (function_name nfuncs "_fn.txt")
+        close(filepath)
+    }
+
+    # Initial values for statistics variables
+    num_of_functions = 0
+    max_mcyclo = 0
+    max_function_length = 0
+    num_of_simple_functions = 0
+    num_of_moderate_functions = 0
+    num_of_high_functions = 0
+    num_of_untestable_functions = 0
+}
+
+# Epilogue
+END {
+    # Print header (only for html)
+    if (output_lang == "html")
+    {
+        html_header()
+    }
+
+    # Print prolog
+    if ((output_lang == "html") &&
+        (html_prolog != ""))
+    {
+        print html_prolog
+    }
+    if ((output_lang == "wiki") &&
+        (wiki_prolog != ""))
+    {
+        print wiki_prolog
+    }
+
+    if (output_lang == "html")
+    {
+        print "<div class=\"page_title\">" package_name " Cyclomatic Complexity Report</div>"
+        print "<p>Report generated at: <span class=\"report_timestamp\">" strftime() "</div></p>"
+    }
+    if (output_lang == "wiki")
+    {
+        print "==" package_name " Cyclomatic Complexity Report=="
+        print "Report generated at: '''" strftime() "'''"
+    }
+
+    if (section_global_stats_p)
+    {
+        build_stats()
+
+        if (output_lang == "html")
+        {
+            html_global_stats()
+        }
+        if (output_lang == "wiki")
+        {
+            wiki_global_stats()
+        }
+    }
+    if (section_function_cyclo_p)
+    {
+        if (output_lang == "html")
+        {
+            html_function_cyclo()
+        }
+        if (output_lang == "wiki")
+        {
+            wiki_function_cyclo()
+        }
+    }
+
+    # Print epilog
+    if ((output_lang == "html") &&
+        (html_epilog != ""))
+    {
+        print html_epilog
+    }
+    if ((output_lang == "wiki") &&
+        (wiki_epilog != ""))
+    {
+        print wiki_epilog
+    }
+
+    # Print footer (html only)
+    if (output_lang == "html")
+    {
+        html_footer()
+    }
+}
+
+# End of pmccabe2html
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
new file mode 100644 (file)
index 0000000..9140826
--- /dev/null
@@ -0,0 +1,9291 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+% 
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2009-08-14.15}
+%
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009 Free Software Foundation, Inc.
+%
+% This texinfo.tex file 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 texinfo.tex file 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/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction.  (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+%   ftp://tug.org/tex/texinfo.tex
+%     (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org.  Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem.  Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution.  For a simple
+% manual foo.texi, however, you can get away with this:
+%   tex foo.texi
+%   texindex foo.??
+%   tex foo.texi
+%   tex foo.texi
+%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent.  You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+  \catcode`+=\active \catcode`\_=\active}
+
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active
+\global\let\ptexquoteright'}% Math-mode def from plain.tex.
+\let\ptexraggedright=\raggedright
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+  \let\linenumber = \empty % Pre-3.0.
+\else
+  \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar  = `\-
+\chardef\dotChar   = `\.
+\chardef\exclamChar= `\!
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar  = `\;
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+  ap-pen-dix bit-map bit-maps
+  data-base data-bases eshell fall-ing half-way long-est man-u-script
+  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+  spell-ing spell-ings
+  stand-alone strong-est time-stamp time-stamps which-ever white-space
+  wide-spread wrap-around
+}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line.  It should
+% surround any changed text.  This approach does *not* work if the
+% change spans more than two lines of output.  To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+  % \vadjust can only be used in horizontal mode.
+  \leavevmode
+  %
+  % Append this vertical mode material after the current line in the output.
+  \vadjust{%
+    % We want to insert a rule with the height and depth of the current
+    % leading; that is exactly what \strutbox is supposed to record.
+    \vskip-\baselineskip
+    %
+    % \vadjust-items are inserted at the left edge of the type.  So
+    % the \llap here moves out into the left-hand margin.
+    \llap{%
+      %
+      % For a thicker or thinner bar, change the `1pt'.
+      \vrule height\baselineskip width1pt
+      %
+      % This is the space between the bar and the text.
+      \hskip 12pt
+    }%
+  }%
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal.  We don't just call \tracingall here,
+% since that produces some useless output on the terminal.  We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+  \tracingstats2
+  \tracingpages1
+  \tracinglostchars2  % 2 gives us more in etex
+  \tracingparagraphs1
+  \tracingoutput1
+  \tracingmacros2
+  \tracingrestores1
+  \showboxbreadth\maxdimen \showboxdepth\maxdimen
+  \ifx\eTeXversion\undefined\else % etex gives us more logging
+    \tracingscantokens1
+    \tracingifs1
+    \tracinggroups1
+    \tracingnesting2
+    \tracingassigns1
+  \fi
+  \tracingcommands3  % 3 gives us more in etex
+  \errorcontextlines16
+}%
+
+% add check for \lastpenalty to plain's definitions.  If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+  \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+  \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+  \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong  \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page.  The solution is
+% described on page 260 of The TeXbook.  It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after.  I won't pretend I can describe this better than DEK...
+\def\domark{%
+  \toks0=\expandafter{\lastchapterdefs}%
+  \toks2=\expandafter{\lastsectiondefs}%
+  \toks4=\expandafter{\prevchapterdefs}%
+  \toks6=\expandafter{\prevsectiondefs}%
+  \toks8=\expandafter{\lastcolordefs}%
+  \mark{%
+                   \the\toks0 \the\toks2
+      \noexpand\or \the\toks4 \the\toks6
+    \noexpand\else \the\toks8
+  }%
+}
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+  \ifcase0\topmark\fi
+  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument.  Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+  %
+  \ifodd\pageno  \advance\hoffset by \bindingoffset
+  \else \advance\hoffset by -\bindingoffset\fi
+  %
+  % Do this outside of the \shipout so @code etc. will be expanded in
+  % the headline as they should be, not taken literally (outputting ''code).
+  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+  %
+  {%
+    % Have to do this stuff outside the \shipout because we want it to
+    % take effect in \write's, yet the group defined by the \vbox ends
+    % before the \shipout runs.
+    %
+    \indexdummies         % don't expand commands in the output.
+    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
+               % the page break happens to be in the middle of an example.
+               % We don't want .vr (or whatever) entries like this:
+               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+               % "\acronym" won't work when it's read back in;
+               % it needs to be
+               % {\code {{\tt \backslashcurfont }acronym}
+    \shipout\vbox{%
+      % Do this early so pdf references go to the beginning of the page.
+      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+      %
+      \ifcropmarks \vbox to \outervsize\bgroup
+        \hsize = \outerhsize
+        \vskip-\topandbottommargin
+        \vtop to0pt{%
+          \line{\ewtop\hfil\ewtop}%
+          \nointerlineskip
+          \line{%
+            \vbox{\moveleft\cornerthick\nstop}%
+            \hfill
+            \vbox{\moveright\cornerthick\nstop}%
+          }%
+          \vss}%
+        \vskip\topandbottommargin
+        \line\bgroup
+          \hfil % center the page within the outer (page) hsize.
+          \ifodd\pageno\hskip\bindingoffset\fi
+          \vbox\bgroup
+      \fi
+      %
+      \unvbox\headlinebox
+      \pagebody{#1}%
+      \ifdim\ht\footlinebox > 0pt
+        % Only leave this space if the footline is nonempty.
+        % (We lessened \vsize for it in \oddfootingyyy.)
+        % The \baselineskip=24pt in plain's \makefootline has no effect.
+        \vskip 24pt
+        \unvbox\footlinebox
+      \fi
+      %
+      \ifcropmarks
+          \egroup % end of \vbox\bgroup
+        \hfil\egroup % end of (centering) \line\bgroup
+        \vskip\topandbottommargin plus1fill minus1fill
+        \boxmaxdepth = \cornerthick
+        \vbox to0pt{\vss
+          \line{%
+            \vbox{\moveleft\cornerthick\nsbot}%
+            \hfill
+            \vbox{\moveright\cornerthick\nsbot}%
+          }%
+          \nointerlineskip
+          \line{\ewbot\hfil\ewbot}%
+        }%
+      \egroup % \vbox from first cropmarks clause
+      \fi
+    }% end of \shipout\vbox
+  }% end of group with \indexdummies
+  \advancepageno
+  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1\relax \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks.  Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1.  The argument is the rest of
+% the input line (except we remove a trailing comment).  #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+  \def\argtorun{#2}%
+  \begingroup
+    \obeylines
+    \spaceisspace
+    #1%
+    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+  \gdef\parseargline#1^^M{%
+    \endgroup % End of the group started in \parsearg.
+    \argremovecomment #1\comment\ArgTerm%
+  }%
+}
+
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+%    @end itemize  @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+  \def\temp{#3}%
+  \ifx\temp\empty
+    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+    \let\temp\finishparsearg
+  \else
+    \let\temp\argcheckspaces
+  \fi
+  % Put the space token in:
+  \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+% \parseargdef\foo{...}
+%      is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick.  --kasal, 16nov03
+
+\def\parseargdef#1{%
+  \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+  \def#2{\parsearg#1}%
+  \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+  \obeyspaces
+  \gdef\obeyedspace{ }
+
+  % Make each space character in the input produce a normal interword
+  % space in the output.  Don't allow a line break at this space, as this
+  % is used only in environments like @example, where each line of input
+  % should produce a line of output anyway.
+  %
+  \gdef\sepspaces{\obeyspaces\let =\tie}
+
+  % If an index command is used in an @example environment, any spaces
+  % therein should become regular spaces in the raw index file, not the
+  % expansion of \tie (\leavevmode \penalty \@M \ ).
+  \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex.  It's used like this:
+%
+%   \envdef\foo{...}
+%   \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo.  \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches.  The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group.  (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+  \def\temp{#1}%
+  \ifx\thisenv\temp
+  \else
+    \badenverr
+  \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+  \errhelp = \EMsimple
+  \errmessage{This command can appear only \inenvironment\temp,
+    not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+  \ifx#1\empty
+    out of any environment%
+  \else
+    in environment \expandafter\string#1%
+  \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+  \if 1\csname iscond.#1\endcsname
+  \else
+    % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+    \expandafter\checkenv\csname#1\endcsname
+    \csname E#1\endcsname
+    \endgroup
+  \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+  % Definitions to produce \{ and \} commands for indices,
+  % and @{ and @} for the aux/toc files.
+  \catcode`\{ = \other \catcode`\} = \other
+  \catcode`\[ = 1 \catcode`\] = 2
+  \catcode`\! = 0 \catcode`\\ = \other
+  !gdef!lbracecmd[\{]%
+  !gdef!rbracecmd[\}]%
+  !gdef!lbraceatcmd[@{]%
+  !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+  \def\temp{#1}%
+  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+  \else \errmessage{@dotless can be used only with i or j}%
+  \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence.  (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo.  Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+  L\kern-.36em
+  {\setbox0=\hbox{T}%
+   \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+  \kern-.15em
+  \TeX
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off  says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+  \def\temp{#1}%
+  \ifx\temp\onword \plainfrenchspacing
+  \else\ifx\temp\offword \plainnonfrenchspacing
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @frenchspacing option `\temp', must be on/off}%
+  \fi\fi
+}
+
+% @w prevents a word break.  Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line.  According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0).  If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large.  This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material.  In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom.  The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+  \ifnum\catcode`\^^M=\active \else
+    \errhelp = \groupinvalidhelp
+    \errmessage{@group invalid in context where filling is enabled}%
+  \fi
+  \startsavinginserts
+  %
+  \setbox\groupbox = \vtop\bgroup
+    % Do @comment since we are called inside an environment such as
+    % @example, where each end-of-line in the input causes an
+    % end-of-line in the output.  We don't want the end-of-line after
+    % the `@group' to put extra space in the output.  Since @group
+    % should appear on a line by itself (according to the Texinfo
+    % manual), we don't worry about eating any user text.
+    \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it.  Thus, space below is not quite equal to space
+% above.  But it's pretty close.
+\def\Egroup{%
+    % To get correct interline space between the last line of the group
+    % and the first line afterwards, we have to propagate \prevdepth.
+    \endgraf % Not \par, as it may have been set to \lisppar.
+    \global\dimen1 = \prevdepth
+  \egroup           % End the \vtop.
+  % \dimen0 is the vertical size of the group's box.
+  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
+  % \dimen2 is how much space is left on the page (more or less).
+  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
+  % if the group doesn't fit on the current page, and it's a big big
+  % group, force a page break.
+  \ifdim \dimen0 > \dimen2
+    \ifdim \pagetotal < \vfilllimit\pageheight
+      \page
+    \fi
+  \fi
+  \box\groupbox
+  \prevdepth = \dimen1
+  \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil  \mil=0.001in
+
+% Old definition--didn't work.
+%\parseargdef\need{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\parseargdef\need{%
+  % Ensure vertical mode, so we don't make a big box in the middle of a
+  % paragraph.
+  \par
+  %
+  % If the @need value is less than one line space, it's useless.
+  \dimen0 = #1\mil
+  \dimen2 = \ht\strutbox
+  \advance\dimen2 by \dp\strutbox
+  \ifdim\dimen0 > \dimen2
+    %
+    % Do a \strut just to make the height of this box be normal, so the
+    % normal leading is inserted relative to the preceding line.
+    % And a page break here is fine.
+    \vtop to #1\mil{\strut\vfil}%
+    %
+    % TeX does not even consider page breaks if a penalty added to the
+    % main vertical list is 10000 or more.  But in order to see if the
+    % empty box we just added fits on the page, we must make it consider
+    % page breaks.  On the other hand, we don't want to actually break the
+    % page after the empty box.  So we use a penalty of 9999.
+    %
+    % There is an extremely small chance that TeX will actually break the
+    % page at this \penalty, if there are no other feasible breakpoints in
+    % sight.  (If the user is using lots of big @group commands, which
+    % almost-but-not-quite fill up a page, TeX will have a hard time doing
+    % good page breaking, for example.)  However, I could not construct an
+    % example where a page broke at this \penalty; if it happens in a real
+    % document, then we can reconsider our strategy.
+    \penalty9999
+    %
+    % Back up by the size of the box, whether we did a page break or not.
+    \kern -#1\mil
+    %
+    % Do not allow a page break right after this kern.
+    \nobreak
+  \fi
+}
+
+% @br   forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+  \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph.  For more general purposes, use the \margin insertion
+% class.  WHICH is `l' or `r'.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+  \nobreak
+  \kern-\strutdepth
+  \vtop to \strutdepth{%
+    \baselineskip=\strutdepth
+    \vss
+    % if you have multiple lines of stuff to put here, you'll need to
+    % make the vbox yourself of the appropriate size.
+    \ifx#1l%
+      \llap{\ignorespaces #2\hskip\inmarginspacing}%
+    \else
+      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+    \fi
+    \null
+  }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+  \setbox0 = \hbox{\ignorespaces #2}%
+  \ifdim\wd0 > 0pt
+    \def\lefttext{#1}%  have both texts
+    \def\righttext{#2}%
+  \else
+    \def\lefttext{#1}%  have only one text
+    \def\righttext{#1}%
+  \fi
+  %
+  \ifodd\pageno
+    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+  \else
+    \def\temp{\inleftmargin\lefttext}%
+  \fi
+  \temp
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+  \pushthisfilestack
+  \def\thisfile{#1}%
+  {%
+    \makevalueexpandable  % we want to expand any @value in FILE.
+    \turnoffactive        % and allow special characters in the expansion
+    \indexnofonts         % Allow `@@' and other weird things in file names.
+    \edef\temp{\noexpand\input #1 }%
+    %
+    % This trickery is to read FILE outside of a group, in case it makes
+    % definitions, etc.
+    \expandafter
+  }\temp
+  \popthisfilestack
+}
+\def\filenamecatcodes{%
+  \catcode`\\=\other
+  \catcode`~=\other
+  \catcode`^=\other
+  \catcode`_=\other
+  \catcode`|=\other
+  \catcode`<=\other
+  \catcode`>=\other
+  \catcode`+=\other
+  \catcode`-=\other
+  \catcode`\`=\other
+  \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+  \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+  the stack of filenames is empty.}}
+
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+  \ifhmode
+    \let\next\centerH
+  \else
+    \let\next\centerV
+  \fi
+  \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+  {%
+    \hfil\break
+    \advance\hsize by -\leftskip
+    \advance\hsize by -\rightskip
+    \line{#1}%
+    \break
+  }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
+
+% @sp n   outputs n lines of vertical space
+
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore  is another way to write a comment
+
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \defaultparindent = 0pt
+    \else
+      \defaultparindent = #1em
+    \fi
+  \fi
+  \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+  \def\temp{#1}%
+  \ifx\temp\asisword
+  \else
+    \ifx\temp\noneword
+      \lispnarrowing = 0pt
+    \else
+      \lispnarrowing = #1em
+    \fi
+  \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading.  If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+  \def\temp{#1}%
+  \ifx\temp\noneword
+    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+  \else\ifx\temp\insertword
+    \let\suppressfirstparagraphindent = \relax
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @firstparagraphindent option `\temp'}%
+  \fi\fi
+}
+
+% Here is how we actually suppress indentation.  Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+  \gdef\indent{%
+    \restorefirstparagraphindent
+    \indent
+  }%
+  \gdef\noindent{%
+    \restorefirstparagraphindent
+    \noindent
+  }%
+  \global\everypar = {%
+    \kern -\parindent
+    \restorefirstparagraphindent
+  }%
+}
+
+\gdef\restorefirstparagraphindent{%
+  \global \let \indent = \ptexindent
+  \global \let \noindent = \ptexnoindent
+  \global \everypar = {}%
+}
+
+
+% @asis just yields its argument.  Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+  \catcode`\_ = \active
+  \gdef\mathunderscore{%
+    \catcode`\_=\active
+    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+  }
+}
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care.  Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+  \tex
+  \mathunderscore
+  \let\\ = \mathbackslash
+  \mathactive
+  % make the texinfo accent commands work in math mode
+  \let\"=\ddot
+  \let\'=\acute
+  \let\==\bar
+  \let\^=\hat
+  \let\`=\grave
+  \let\u=\breve
+  \let\v=\check
+  \let\~=\tilde
+  \let\dotaccent=\dot
+  $\finishmath
+}
+\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+  \catcode`^ = \active
+  \catcode`< = \active
+  \catcode`> = \active
+  \catcode`+ = \active
+  \catcode`' = \active
+  \gdef\mathactive{%
+    \let^ = \ptexhat
+    \let< = \ptexless
+    \let> = \ptexgtr
+    \let+ = \ptexplus
+    \let' = \ptexquoteright
+  }
+}
+
+% Some math mode symbols.
+\def\bullet{$\ptexbullet$}
+\def\geq{\ifmmode \ge\else $\ge$\fi}
+\def\leq{\ifmmode \le\else $\le$\fi}
+\def\minus{\ifmmode -\else $-$\fi}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em.  So do
+% whichever is larger.
+%
+\def\dots{%
+  \leavevmode
+  \setbox0=\hbox{...}% get width of three periods
+  \ifdim\wd0 > 1.5em
+    \dimen0 = \wd0
+  \else
+    \dimen0 = 1.5em
+  \fi
+  \hbox to \dimen0{%
+    \hskip 0pt plus.25fil
+    .\hskip 0pt plus1fil
+    .\hskip 0pt plus1fil
+    .\hskip 0pt plus.5fil
+  }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+  \dots
+  \spacefactor=\endofsentencespacefactor
+}
+
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
+   \iflinks
+     \tryauxfile
+     % Open the new aux file.  TeX will close it automatically at exit.
+     \immediate\openout\auxfile=\jobname.aux
+   \fi % \openindices needs to do some work in any case.
+   \openindices
+   \let\setfilename=\comment % Ignore extra @setfilename cmds.
+   %
+   % If texinfo.cnf is present on the system, read it.
+   % Useful for site-wide @afourpaper, etc.
+   \openin 1 texinfo.cnf
+   \ifeof 1 \else \input texinfo.cnf \fi
+   \closein 1
+   %
+   \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+  \newindex{cp}%
+  \newcodeindex{fn}%
+  \newcodeindex{vr}%
+  \newcodeindex{tp}%
+  \newcodeindex{ky}%
+  \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set).  So we test for \relax and 0 as well as \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\else
+  \ifx\pdfoutput\relax
+  \else
+    \ifcase\pdfoutput
+    \else
+      \pdftrue
+    \fi
+  \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places.  Thus, we have to
+% double any backslashes.  Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e.  Not good.
+% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html
+% (and related messages, the final outcome is that it is up to the TeX
+% user to double the backslashes and otherwise make the string valid, so
+% that's what we do).
+
+% double active backslashes.
+%
+{\catcode`\@=0 \catcode`\\=\active
+ @gdef@activebackslashdouble{%
+   @catcode`@\=@active
+   @let\=@doublebackslash}
+}
+
+% To handle parens, we must adopt a different approach, since parens are
+% not active characters.  hyperref.dtx (which has the same problem as
+% us) handles it with this amazing macro to replace tokens, with minor
+% changes for Texinfo.  It is included here under the GPL by permission
+% from the author, Heiko Oberdiek.
+%
+% #1 is the tokens to replace.
+% #2 is the replacement.
+% #3 is the control sequence with the string.
+%
+\def\HyPsdSubst#1#2#3{%
+  \def\HyPsdReplace##1#1##2\END{%
+    ##1%
+    \ifx\\##2\\%
+    \else
+      #2%
+      \HyReturnAfterFi{%
+        \HyPsdReplace##2\END
+      }%
+    \fi
+  }%
+  \xdef#3{\expandafter\HyPsdReplace#3#1\END}%
+}
+\long\def\HyReturnAfterFi#1\fi{\fi#1}
+
+% #1 is a control sequence in which to do the replacements.
+\def\backslashparens#1{%
+  \xdef#1{#1}% redefine it as its expansion; the definition is simply
+             % \lastnode when called from \setref -> \pdfmkdest.
+  \HyPsdSubst{(}{\realbackslash(}{#1}%
+  \HyPsdSubst{)}{\realbackslash)}{#1}%
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found.  (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+  %
+  % Color manipulation macros based on pdfcolor.tex,
+  % except using rgb instead of cmyk; the latter is said to render as a
+  % very dark gray on-screen and a very dark halftone in print, instead
+  % of actual black.
+  \def\rgbDarkRed{0.50 0.09 0.12}
+  \def\rgbBlack{0 0 0}
+  %
+  % k sets the color for filling (usual text, etc.);
+  % K sets the color for stroking (thin rules, e.g., normal _'s).
+  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
+  %
+  % Set color, and create a mark which defines \thiscolor accordingly,
+  % so that \makeheadline knows which color to restore.
+  \def\setcolor#1{%
+    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+    \domark
+    \pdfsetcolor{#1}%
+  }
+  %
+  \def\maincolor{\rgbBlack}
+  \pdfsetcolor{\maincolor}
+  \edef\thiscolor{\maincolor}
+  \def\lastcolordefs{}
+  %
+  \def\makefootline{%
+    \baselineskip24pt
+    \line{\pdfsetcolor{\maincolor}\the\footline}%
+  }
+  %
+  \def\makeheadline{%
+    \vbox to 0pt{%
+      \vskip-22.5pt
+      \line{%
+        \vbox to8.5pt{}%
+        % Extract \thiscolor definition from the marks.
+        \getcolormarks
+        % Typeset the headline with \maincolor, then restore the color.
+        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+      }%
+      \vss
+    }%
+    \nointerlineskip
+  }
+  %
+  %
+  \pdfcatalog{/PageMode /UseOutlines}
+  %
+  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+  \def\dopdfimage#1#2#3{%
+    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+    %
+    % pdftex (and the PDF format) support .png, .jpg, .pdf (among
+    % others).  Let's try in that order.
+    \let\pdfimgext=\empty
+    \begingroup
+      \openin 1 #1.png \ifeof 1
+        \openin 1 #1.jpg \ifeof 1
+          \openin 1 #1.jpeg \ifeof 1
+            \openin 1 #1.JPG \ifeof 1
+              \openin 1 #1.pdf \ifeof 1
+                \openin 1 #1.PDF \ifeof 1
+                  \errhelp = \nopdfimagehelp
+                  \errmessage{Could not find image file #1 for pdf}%
+                \else \gdef\pdfimgext{PDF}%
+                \fi
+              \else \gdef\pdfimgext{pdf}%
+              \fi
+            \else \gdef\pdfimgext{JPG}%
+            \fi
+          \else \gdef\pdfimgext{jpeg}%
+          \fi
+        \else \gdef\pdfimgext{jpg}%
+        \fi
+      \else \gdef\pdfimgext{png}%
+      \fi
+      \closein 1
+    \endgroup
+    %
+    % without \immediate, ancient pdftex seg faults when the same image is
+    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
+    \ifnum\pdftexversion < 14
+      \immediate\pdfimage
+    \else
+      \immediate\pdfximage
+    \fi
+      \ifdim \wd0 >0pt width \imagewidth \fi
+      \ifdim \wd2 >0pt height \imageheight \fi
+      \ifnum\pdftexversion<13
+         #1.\pdfimgext
+       \else
+         {#1.\pdfimgext}%
+       \fi
+    \ifnum\pdftexversion < 14 \else
+      \pdfrefximage \pdflastximage
+    \fi}
+  %
+  \def\pdfmkdest#1{{%
+    % We have to set dummies so commands such as @code, and characters
+    % such as \, aren't expanded when present in a section title.
+    \indexnofonts
+    \turnoffactive
+    \activebackslashdouble
+    \makevalueexpandable
+    \def\pdfdestname{#1}%
+    \backslashparens\pdfdestname
+    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+  }}
+  %
+  % used to mark target names; must be expandable.
+  \def\pdfmkpgn#1{#1}
+  %
+  % by default, use a color that is dark enough to print on paper as
+  % nearly black, but still distinguishable for online viewing.
+  \def\urlcolor{\rgbDarkRed}
+  \def\linkcolor{\rgbDarkRed}
+  \def\endlink{\setcolor{\maincolor}\pdfendlink}
+  %
+  % Adding outlines to PDF; macros for calculating structure of outlines
+  % come from Petr Olsak
+  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+    \else \csname#1\endcsname \fi}
+  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+    \advance\tempnum by 1
+    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+  %
+  % #1 is the section text, which is what will be displayed in the
+  % outline by the pdf viewer.  #2 is the pdf expression for the number
+  % of subentries (or empty, for subsubsections).  #3 is the node text,
+  % which might be empty if this toc entry had no corresponding node.
+  % #4 is the page number
+  %
+  \def\dopdfoutline#1#2#3#4{%
+    % Generate a link to the node text if that exists; else, use the
+    % page number.  We could generate a destination for the section
+    % text in the case where a section has no node, but it doesn't
+    % seem worth the trouble, since most documents are normally structured.
+    \def\pdfoutlinedest{#3}%
+    \ifx\pdfoutlinedest\empty
+      \def\pdfoutlinedest{#4}%
+    \else
+      % Doubled backslashes in the name.
+      {\activebackslashdouble \xdef\pdfoutlinedest{#3}%
+       \backslashparens\pdfoutlinedest}%
+    \fi
+    %
+    % Also double the backslashes in the display string.
+    {\activebackslashdouble \xdef\pdfoutlinetext{#1}%
+     \backslashparens\pdfoutlinetext}%
+    %
+    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+  }
+  %
+  \def\pdfmakeoutlines{%
+    \begingroup
+      % Thanh's hack / proper braces in bookmarks
+      \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+      \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+      %
+      % Read toc silently, to get counts of subentries for \pdfoutline.
+      \def\numchapentry##1##2##3##4{%
+       \def\thischapnum{##2}%
+       \def\thissecnum{0}%
+       \def\thissubsecnum{0}%
+      }%
+      \def\numsecentry##1##2##3##4{%
+       \advancenumber{chap\thischapnum}%
+       \def\thissecnum{##2}%
+       \def\thissubsecnum{0}%
+      }%
+      \def\numsubsecentry##1##2##3##4{%
+       \advancenumber{sec\thissecnum}%
+       \def\thissubsecnum{##2}%
+      }%
+      \def\numsubsubsecentry##1##2##3##4{%
+       \advancenumber{subsec\thissubsecnum}%
+      }%
+      \def\thischapnum{0}%
+      \def\thissecnum{0}%
+      \def\thissubsecnum{0}%
+      %
+      % use \def rather than \let here because we redefine \chapentry et
+      % al. a second time, below.
+      \def\appentry{\numchapentry}%
+      \def\appsecentry{\numsecentry}%
+      \def\appsubsecentry{\numsubsecentry}%
+      \def\appsubsubsecentry{\numsubsubsecentry}%
+      \def\unnchapentry{\numchapentry}%
+      \def\unnsecentry{\numsecentry}%
+      \def\unnsubsecentry{\numsubsecentry}%
+      \def\unnsubsubsecentry{\numsubsubsecentry}%
+      \readdatafile{toc}%
+      %
+      % Read toc second time, this time actually producing the outlines.
+      % The `-' means take the \expnumber as the absolute number of
+      % subentries, which we calculated on our first read of the .toc above.
+      %
+      % We use the node names as the destinations.
+      \def\numchapentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+      \def\numsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+      \def\numsubsecentry##1##2##3##4{%
+        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+      \def\numsubsubsecentry##1##2##3##4{% count is always zero
+        \dopdfoutline{##1}{}{##3}{##4}}%
+      %
+      % PDF outlines are displayed using system fonts, instead of
+      % document fonts.  Therefore we cannot use special characters,
+      % since the encoding is unknown.  For example, the eogonek from
+      % Latin 2 (0xea) gets translated to a | character.  Info from
+      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+      %
+      % xx to do this right, we have to translate 8-bit characters to
+      % their "best" equivalent, based on the @documentencoding.  Right
+      % now, I guess we'll just let the pdf reader have its way.
+      \indexnofonts
+      \setupdatafile
+      \catcode`\\=\active \otherbackslash
+      \input \tocreadfilename
+    \endgroup
+  }
+  %
+  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+    \ifx\PP\D\let\nextsp\relax
+    \else\let\nextsp\skipspaces
+      \ifx\p\space\else\addtokens{\filename}{\PP}%
+        \advance\filenamelength by 1
+      \fi
+    \fi
+    \nextsp}
+  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+  \ifnum\pdftexversion < 14
+    \let \startlink \pdfannotlink
+  \else
+    \let \startlink \pdfstartlink
+  \fi
+  % make a live url in pdf output.
+  \def\pdfurl#1{%
+    \begingroup
+      % it seems we really need yet another set of dummies; have not
+      % tried to figure out what each command should do in the context
+      % of @url.  for now, just make @/ a no-op, that's the only one
+      % people have actually reported a problem with.
+      %
+      \normalturnoffactive
+      \def\@{@}%
+      \let\/=\empty
+      \makevalueexpandable
+      % do we want to go so far as to use \indexnofonts instead of just
+      % special-casing \var here?
+      \def\var##1{##1}%
+      %
+      \leavevmode\setcolor{\urlcolor}%
+      \startlink attr{/Border [0 0 0]}%
+        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+    \endgroup}
+  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+  \def\maketoks{%
+    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+    \ifx\first0\adn0
+    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+    \else
+      \ifnum0=\countA\else\makelink\fi
+      \ifx\first.\let\next=\done\else
+        \let\next=\maketoks
+        \addtokens{\toksB}{\the\toksD}
+        \ifx\first,\addtokens{\toksB}{\space}\fi
+      \fi
+    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+    \next}
+  \def\makelink{\addtokens{\toksB}%
+    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+  \def\pdflink#1{%
+    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+    \setcolor{\linkcolor}#1\endlink}
+  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+  % non-pdf mode
+  \let\pdfmkdest = \gobble
+  \let\pdfurl = \gobble
+  \let\endlink = \relax
+  \let\setcolor = \gobble
+  \let\pdfsetcolor = \gobble
+  \let\pdfmakeoutlines = \relax
+\fi  % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+  \csname ten#1\endcsname  % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold.  Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% Default leading.
+\newdimen\textleading  \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly.  There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\def\setleading#1{%
+  \dimen0 = #1\relax
+  \normalbaselineskip = \baselinefactor\dimen0
+  \normallineskip = \lineskipfactor\normalbaselineskip
+  \normalbaselines
+  \setbox\strutbox =\hbox{%
+    \vrule width0pt height\strutheightpercent\baselineskip
+                    depth \strutdepthpercent \baselineskip
+  }%
+}
+
+% PDF CMaps.  See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\undefined \else
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+%
+% \cmapOT1IT
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+%
+% \cmapOT1TT
+  \begingroup
+    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+    }\endgroup
+  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+  }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
+% empty to omit).
+\def\setfont#1#2#3#4#5{%
+  \font#1=\fontprefix#2#3 scaled #4
+  \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+% emacs-page end of cmaps
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx}               %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt.  This is the default in
+% Texinfo.
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 11pt text font size definitions
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit.  This is for the GNU
+% Press printing of the Emacs 22 manual.  Maybe other manuals in the
+% future.  Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+% reduce space between paragraphs
+\divide\parskip by 2
+
+% reset the current fonts
+\textfonts
+\rm
+} % end of 10pt text font size definitions
+
+
+% We provide the user-level command
+%   @fonttextsize 10
+% (or 11) to redefine the text font size.  pt is assumed.
+%
+\def\xword{10}
+\def\xiword{11}
+%
+\parseargdef\fonttextsize{%
+  \def\textsizearg{#1}%
+  \wlog{doing @fonttextsize \textsizearg}%
+  %
+  % Set \globaldefs so that documents can use this inside @tex, since
+  % makeinfo 4.8 does not support it, but we need it nonetheless.
+  %
+ \begingroup \globaldefs=1
+  \ifx\textsizearg\xword \definetextfontsizex
+  \else \ifx\textsizearg\xiword \definetextfontsizexi
+  \else
+    \errhelp=\EMsimple
+    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
+  \fi\fi
+ \endgroup
+}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families.  Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+  \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE.  We do this because \STYLE needs to also set the
+% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower).  These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+  \let\tenttsl=\textttsl
+  \def\curfontsize{text}%
+  \def\lsize{reduced}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+  \let\tenttsl=\titlettsl
+  \def\curfontsize{title}%
+  \def\lsize{chap}\def\lllsize{subsec}%
+  \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
+\def\chapfonts{%
+  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+  \let\tenttsl=\chapttsl
+  \def\curfontsize{chap}%
+  \def\lsize{sec}\def\lllsize{text}%
+  \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+  \let\tenttsl=\secttsl
+  \def\curfontsize{sec}%
+  \def\lsize{subsec}\def\lllsize{reduced}%
+  \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+  \let\tenttsl=\ssecttsl
+  \def\curfontsize{ssec}%
+  \def\lsize{text}\def\lllsize{small}%
+  \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+  \let\tenttsl=\reducedttsl
+  \def\curfontsize{reduced}%
+  \def\lsize{small}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+  \let\tenttsl=\smallttsl
+  \def\curfontsize{small}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+  \let\tenttsl=\smallerttsl
+  \def\curfontsize{smaller}%
+  \def\lsize{smaller}\def\lllsize{smaller}%
+  \resetmathfonts \setleading{9.5pt}}
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+%   8.5x11=86   smallbook=72  a4=90  a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+%   8.5x11=90+  smallbook=80  a4=90+  a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt.  So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+%   8.5x11=71  smallbook=60  a4=75  a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font.  Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+  \csname markup#1true\endcsname
+  \def\currentmarkupstyle{#1}%
+  \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+  \expandafter\def\expandafter\markupstylesetup
+    \expandafter{\markupstylesetup #1}%
+  \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+  \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname
+  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+  \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname
+  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+
+\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+\let\markupsetuplqsamp \markupsetnoligaturesquoteleft
+\let\markupsetuplqkbd \markupsetnoligaturesquoteleft
+
+% Allow an option to not replace quotes with a regular directed right
+% quote/apostrophe (char 0x27), but instead use the undirected quote
+% from cmtt (char 0x0d).  The undirected quote is ugly, so don't make it
+% the default, but it works for pasting with more pdf viewers (at least
+% evince), the lilypond developers report.  xpdf does work with the
+% regular 0x27.
+%
+\def\codequoteright{%
+  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+      '%
+    \else \char'15 \fi
+  \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+      % [Knuth] pp. 380,381,391
+      % \relax disables Spanish ligatures ?` and !` of \tt font.
+      \relax`%
+    \else \char'22 \fi
+  \else \char'22 \fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+                    \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% @cite is like \smartslanted except unconditionally use \sl.  We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}}
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}}              % roman font
+\def\sc#1{{\smallcaps#1}}       % smallcaps font
+\def\ii#1{{\it #1}}             % italic font
+
+% @b, explicit bold.  Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph.  Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+  \def\plainfrenchspacing{%
+    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+    \def\endofsentencespacefactor{1000}% for @. and friends
+  }
+  \def\plainnonfrenchspacing{%
+    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+    \def\endofsentencespacefactor{3000}% for @. and friends
+  }
+\catcode`@=\other
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+  {\tt \rawbackslash \plainfrenchspacing #1}%
+  \null
+}
+
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+
+% definition of @key that produces a lozenge.  Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+%    \vbox{\hrule\kern-0.4pt
+%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+%    \kern-0.4pt\hrule}%
+%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge.  If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle.  But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+  \nohyphenation
+  \ifmonospace\else\tt\fi
+  #1}\null}
+
+% ctrl is no longer a Texinfo command.
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+  {%
+    % Change normal interword space to be same as for the current font.
+    \spaceskip = \fontdimen2\font
+    %
+    % Switch to typewriter.
+    \tt
+    %
+    % But `\ ' produces the large typewriter interword space.
+    \def\ {{\spaceskip = 0pt{} }}%
+    %
+    % Turn off hyphenation.
+    \nohyphenation
+    %
+    \rawbackslash
+    \plainfrenchspacing
+    #1%
+  }%
+  \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+%  -- rms.
+{
+  \catcode`\-=\active \catcode`\_=\active
+  \catcode`\'=\active \catcode`\`=\active
+  \global\let'=\rq \global\let`=\lq  % default definitions
+  %
+  \global\def\code{\begingroup
+    \setupmarkupstyle{code}%
+    % The following should really be moved into \setupmarkupstyle handlers.
+    \catcode\dashChar=\active  \catcode\underChar=\active
+    \ifallowcodebreaks
+     \let-\codedash
+     \let_\codeunder
+    \else
+     \let-\realdash
+     \let_\realunder
+    \fi
+    \codex
+  }
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
+  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+  % will therefore expand the active definition of _, which is us
+  % (inside @code that is), therefore an endless loop.
+  \ifusingtt{\ifmmode
+               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+             \else\normalunderscore \fi
+             \discretionary{}{}{}}%
+            {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__.  This is undesirable in
+% some manuals, especially if they don't have long identifiers in
+% general.  @allowcodebreaks provides a way to control this.
+%
+\newif\ifallowcodebreaks  \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\keywordtrue
+    \allowcodebreakstrue
+  \else\ifx\txiarg\keywordfalse
+    \allowcodebreaksfalse
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @allowcodebreaks option `\txiarg'}%
+  \fi\fi
+}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+%   `example' (@kbd uses ttsl only inside of @example and friends),
+%   or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+  \def\txiarg{#1}%
+  \ifx\txiarg\worddistinct
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+  \else\ifx\txiarg\wordexample
+    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+  \else\ifx\txiarg\wordcode
+    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+  \else
+    \errhelp = \EMsimple
+    \errmessage{Unknown @kbdinputstyle option `\txiarg'}%
+  \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow   (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself.  First (mandatory) arg is the url.  Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+  \unsepspaces
+  \pdfurl{#1}%
+  \setbox0 = \hbox{\ignorespaces #3}%
+  \ifdim\wd0 > 0pt
+    \unhbox0 % third arg given, show only that
+  \else
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0 > 0pt
+      \ifpdf
+        \unhbox0             % PDF: 2nd arg given, show only it
+      \else
+        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+      \fi
+    \else
+      \code{#1}% only url given, so show it
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+  \def\email#1{\doemail#1,,\finish}
+  \def\doemail#1,#2,#3\finish{\begingroup
+    \unsepspaces
+    \pdfurl{mailto:#1}%
+    \setbox0 = \hbox{\ignorespaces #2}%
+    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+    \endlink
+  \endgroup}
+\else
+  \let\email=\uref
+\fi
+
+% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find.  We need it for
+% Polish suppressed-l.  --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+  {\selectfonts\lsize #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+  {\plainfrenchspacing #1}%
+  \def\temp{#2}%
+  \ifx\temp\empty \else
+    \space ({\unsepspaces \ignorespaces \temp \unskip})%
+  \fi
+}
+
+
+\message{glyphs,}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+   \advance\hsize by -2\dimen2 % Rules.
+   \vbox{%
+      \hrule height\dimen2
+      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
+         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+         \kern3pt\vrule width\dimen2}% Space to right.
+      \hrule height\dimen2}
+    \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that.  The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math.  Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+  % We set the font at each command, rather than predefining it in
+  % \textfonts and the other font-switching commands, so that
+  % installations which never need the symbol don't have to have the
+  % font installed.
+  %
+  % There is only one designed size (nominal 10pt), so we always scale
+  % that to the current nominal size.
+  %
+  % By the way, simply using "at 1em" works for cmr10 and the like, but
+  % does not work for cmbx10 and other extended/shrunken fonts.
+  %
+  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+  %
+  \ifx\curfontstyle\bfstylename
+    % bold:
+    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+  \else
+    % regular:
+    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+  \fi
+  \thiseurofont
+}
+
+% Glyphs from the EC fonts.  We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases.  We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+  \def\temp{#1}%
+  \ifx\temp\macrocharA\Aogonek
+  \else\ifx\temp\macrochara\aogonek
+  \else\ifx\temp\macrocharE\Eogonek
+  \else\ifx\temp\macrochare\eogonek
+  \else
+    \ecfont \setbox0=\hbox{#1}%
+    \ifdim\ht0=1ex\accent"0C #1%
+    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+    \fi
+  \fi\fi\fi\fi
+  }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
+\def\ecfont{%
+  % We can't distinguish serif/sans and italic/slanted, but this
+  % is used for crude hacks anyway (like adding French and German
+  % quotes to documents typeset with CM, where we lose kerning), so
+  % hopefully nobody will notice/care.
+  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+  \ifx\curfontstyle\bfstylename
+    % bold:
+    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+  \else
+    % regular:
+    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+  \fi
+  \thisecfont
+}
+
+% @registeredsymbol - R in a circle.  The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+               \hfil\crcr\Orb}}%
+    }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\undefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page.  Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+        \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+  % Open one extra group, as we want to close it in the middle of \Etitlepage.
+  \begingroup
+    \parindent=0pt \textfonts
+    % Leave some space at the very top of the page.
+    \vglue\titlepagetopglue
+    % No rule at page bottom unless we print one at the top with @title.
+    \finishedtitlepagetrue
+    %
+    % Most title ``pages'' are actually two pages long, with space
+    % at the top of the second.  We don't want the ragged left on the second.
+    \let\oldpage = \page
+    \def\page{%
+      \iffinishedtitlepage\else
+        \finishtitlepage
+      \fi
+      \let\page = \oldpage
+      \page
+      \null
+    }%
+}
+
+\def\Etitlepage{%
+    \iffinishedtitlepage\else
+       \finishtitlepage
+    \fi
+    % It is important to do the page break before ending the group,
+    % because the headline and footline are only empty inside the group.
+    % If we use the new definition of \page, we always get a blank page
+    % after the title page, which we certainly don't want.
+    \oldpage
+  \endgroup
+  %
+  % Need this before the \...aftertitlepage checks so that if they are
+  % in effect the toc pages will come out with page numbers.
+  \HEADINGSon
+  %
+  % If they want short, they certainly want long too.
+  \ifsetshortcontentsaftertitlepage
+    \shortcontents
+    \contents
+    \global\let\shortcontents = \relax
+    \global\let\contents = \relax
+  \fi
+  %
+  \ifsetcontentsaftertitlepage
+    \contents
+    \global\let\contents = \relax
+    \global\let\shortcontents = \relax
+  \fi
+}
+
+\def\finishtitlepage{%
+  \vskip4pt \hrule height 2pt width \hsize
+  \vskip\titlepagebottomglue
+  \finishedtitlepagetrue
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+  \checkenv\titlepage
+  \leftline{\titlefonts\rmisbold #1}
+  % print a rule at the page bottom also.
+  \finishedtitlepagefalse
+  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+  \checkenv\titlepage
+  {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+  \def\temp{\quotation}%
+  \ifx\thisenv\temp
+    \def\quotationauthor{#1}% printed in \Equotation.
+  \else
+    \checkenv\titlepage
+    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+    {\secfonts\rmisbold \leftline{#1}}%
+  \fi
+}
+
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline    % headline on even pages
+\newtoks\oddheadline     % headline on odd pages
+\newtoks\evenfootline    % footline on even pages
+\newtoks\oddfootline     % footline on odd pages
+
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+                            \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+                            \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what  @headings on  does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+  %
+  % Leave some space for the footline.  Hopefully ok to assume
+  % @evenfooting will not be used by itself.
+  \global\advance\pageheight by -12pt
+  \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top     \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+                          \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+                          \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+  \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double      turns headings on for double-sided printing.
+% @headings single      turns headings on for single-sided printing.
+% @headings off         turns them off.
+% @headings on          same as @headings double, retained for compatibility.
+% @headings after       turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{%
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+  \number\day\space
+  \ifcase\month
+  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+  \fi
+  \space\number\year}
+\fi
+
+% @settitle line...  specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent  \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin  \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+  \advance\hsize by -\rightskip
+  \advance\hsize by -\tableindent
+  \setbox0=\hbox{\itemindicate{#1}}%
+  \itemindex{#1}%
+  \nobreak % This prevents a break before @itemx.
+  %
+  % If the item text does not fit in the space we have, put it on a line
+  % by itself, and do not allow a page break either before or after that
+  % line.  We do not start a paragraph here because then if the next
+  % command is, e.g., @kindex, the whatsit would get put into the
+  % horizontal list on a line by itself, resulting in extra blank space.
+  \ifdim \wd0>\itemmax
+    %
+    % Make this a paragraph so we get the \parskip glue and wrapping,
+    % but leave it ragged-right.
+    \begingroup
+      \advance\leftskip by-\tableindent
+      \advance\hsize by\tableindent
+      \advance\rightskip by0pt plus1fil
+      \leavevmode\unhbox0\par
+    \endgroup
+    %
+    % We're going to be starting a paragraph, but we don't want the
+    % \parskip glue -- logically it's part of the @item we just started.
+    \nobreak \vskip-\parskip
+    %
+    % Stop a page break at the \parskip glue coming up.  However, if
+    % what follows is an environment such as @example, there will be no
+    % \parskip glue; then the negative vskip we just inserted would
+    % cause the example and the item to crash together.  So we use this
+    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+    % \parskip glue after all.  Section titles are handled this way also.
+    %
+    \penalty 10001
+    \endgroup
+    \itemxneedsnegativevskipfalse
+  \else
+    % The item text fits into the space.  Start a paragraph, so that the
+    % following text (if any) will end up on the same line.
+    \noindent
+    % Do this with kerns and \unhbox so that if there is a footnote in
+    % the item text, it can migrate to the main vertical list and
+    % eventually be printed.
+    \nobreak\kern-\tableindent
+    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+    \unhbox0
+    \nobreak\kern\dimen0
+    \endgroup
+    \itemxneedsnegativevskiptrue
+  \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+  \let\itemindex\gobble
+  \tablecheck{table}%
+}
+\envdef\ftable{%
+  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+  \tablecheck{ftable}%
+}
+\envdef\vtable{%
+  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+  \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+  \ifnum \the\catcode`\^^M=\active
+    \endgroup
+    \errmessage{This command won't work in this context; perhaps the problem is
+      that we are \inenvironment\thisenv}%
+    \def\next{\doignore{#1}}%
+  \else
+    \let\next\tablex
+  \fi
+  \next
+}
+\def\tablex#1{%
+  \def\itemindicate{#1}%
+  \parsearg\tabley
+}
+\def\tabley#1{%
+  {%
+    \makevalueexpandable
+    \edef\temp{\noexpand\tablez #1\space\space\space}%
+    \expandafter
+  }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+  \aboveenvbreak
+  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+  \ifnum 0#2>0 \tableindent=#2\mil \fi
+  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+  \itemmax=\tableindent
+  \advance \itemmax by -\itemmargin
+  \advance \leftskip by \tableindent
+  \exdentamount=\tableindent
+  \parindent = 0pt
+  \parskip = \smallskipamount
+  \ifdim \parskip=0pt \parskip=2pt \fi
+  \let\item = \internalBitem
+  \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+  \aboveenvbreak
+  \itemmax=\itemindent
+  \advance\itemmax by -\itemmargin
+  \advance\leftskip by \itemindent
+  \exdentamount=\itemindent
+  \parindent=0pt
+  \parskip=\smallskipamount
+  \ifdim\parskip=0pt \parskip=2pt \fi
+  %
+  % Try typesetting the item mark that if the document erroneously says
+  % something like @itemize @samp (intending @table), there's an error
+  % right away at the @itemize.  It's not the best error message in the
+  % world, but it's better than leaving it to the @item.  This means if
+  % the user wants an empty mark, they have to say @w{} not just @w.
+  \def\itemcontents{#1}%
+  \setbox0 = \hbox{\itemcontents}%
+  %
+  % @itemize with no arg is equivalent to @itemize @bullet.
+  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+  %
+  \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+  \advance\itemno by 1  % for enumerations
+  {\let\par=\endgraf \smallbreak}% reasonable place to break
+  {%
+   % If the document has an @itemize directly after a section title, a
+   % \nobreak will be last on the list, and \sectionheading will have
+   % done a \vskip-\parskip.  In that case, we don't want to zero
+   % parskip, or the item text will crash with the heading.  On the
+   % other hand, when there is normal text preceding the item (as there
+   % usually is), we do want to zero parskip, or there would be too much
+   % space.  In that case, we won't have a \nobreak before.  At least
+   % that's the theory.
+   \ifnum\lastpenalty<10000 \parskip=0in \fi
+   \noindent
+   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+   %
+   \vadjust{\penalty 1200}}% not good to break after first line of item.
+  \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list.  No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+  % If we were given no argument, pretend we were given `1'.
+  \def\thearg{#1}%
+  \ifx\thearg\empty \def\thearg{1}\fi
+  %
+  % Detect if the argument is a single token.  If so, it might be a
+  % letter.  Otherwise, the only valid thing it can be is a number.
+  % (We will always have one token, because of the test we just made.
+  % This is a good thing, since \splitoff doesn't work given nothing at
+  % all -- the first parameter is undelimited.)
+  \expandafter\splitoff\thearg\endmark
+  \ifx\rest\empty
+    % Only one token in the argument.  It could still be anything.
+    % A ``lowercase letter'' is one whose \lccode is nonzero.
+    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+    %   not equal to itself.
+    % Otherwise, we assume it's a number.
+    %
+    % We need the \relax at the end of the \ifnum lines to stop TeX from
+    % continuing to look for a <number>.
+    %
+    \ifnum\lccode\expandafter`\thearg=0\relax
+      \numericenumerate % a number (we hope)
+    \else
+      % It's a letter.
+      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+        \lowercaseenumerate % lowercase letter
+      \else
+        \uppercaseenumerate % uppercase letter
+      \fi
+    \fi
+  \else
+    % Multiple tokens in the argument.  We hope it's a number.
+    \numericenumerate
+  \fi
+}
+
+% An @enumerate whose labels are integers.  The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+  \itemno = \thearg
+  \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more lowercase letters in @enumerate; get a bigger
+                  alphabet}%
+    \fi
+    \char\lccode\itemno
+  }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+  \itemno = \expandafter`\thearg
+  \startenumeration{%
+    % Be sure we're not beyond the end of the alphabet.
+    \ifnum\itemno=0
+      \errmessage{No more uppercase letters in @enumerate; get a bigger
+                  alphabet}
+    \fi
+    \char\uccode\itemno
+  }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments.  Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+  \advance\itemno by -1
+  \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble.  Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+%   @multitable @columnfractions .25 .3 .45
+%   @item ...
+%
+%   Numbers following @columnfractions are the percent of the total
+%   current hsize to be used for each column. You may use as many
+%   columns as desired.
+
+
+% Or use a template:
+%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+%   @item ...
+%   using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+%   @item first col stuff @tab second col stuff @tab third col
+%   @item
+%   first col stuff
+%   @tab
+%   second col stuff
+%   @tab
+%   third col
+%   @item first col stuff @tab second col stuff
+%   @tab Many paragraphs of text may be used in any column.
+%
+%         They will wrap at the width determined by the template.
+%   @item@tab@tab This will be in third column.
+%   @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+%                                                            to baseline.
+%   0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1.  We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+  \global\advance\colcount by 1
+  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+  \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+  \def\firstarg{#1}%
+  \ifx\firstarg\xendsetuptable
+    \let\go = \relax
+  \else
+    \ifx\firstarg\xcolumnfractions
+      \global\setpercenttrue
+    \else
+      \ifsetpercent
+         \let\go\pickupwholefraction
+      \else
+         \global\advance\colcount by 1
+         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+                   % separator; typically that is always in the input, anyway.
+         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+      \fi
+    \fi
+    \ifx\go\pickupwholefraction
+      % Put the argument back for the \pickupwholefraction call, so
+      % we'll always have a period there to be parsed.
+      \def\go{\pickupwholefraction#1}%
+    \else
+      \let\go = \setuptable
+    \fi%
+  \fi
+  \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry.  \everycr resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+  \checkenv\multitable
+  \crcr
+  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+  \the\everytab % for the first item
+}%
+%
+% A \tab used to include \hskip1sp.  But then the space in a template
+% line is not enough.  That is bad.  So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+%                                      --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab  % insert after every tab.
+%
+\envdef\multitable{%
+  \vskip\parskip
+  \startsavinginserts
+  %
+  % @item within a multitable starts a normal row.
+  % We use \def instead of \let so that if one of the multitable entries
+  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+  % \endtemplate) expanding \doitemize.
+  \def\item{\crcr}%
+  %
+  \tolerance=9500
+  \hbadness=9500
+  \setmultitablespacing
+  \parskip=\multitableparskip
+  \parindent=\multitableparindent
+  \overfullrule=0pt
+  \global\colcount=0
+  %
+  \everycr = {%
+    \noalign{%
+      \global\everytab={}%
+      \global\colcount=0 % Reset the column counter.
+      % Check for saved footnotes, etc.
+      \checkinserts
+      % Keeps underfull box messages off when table breaks over pages.
+      %\filbreak
+       % Maybe so, but it also creates really weird page breaks when the
+       % table breaks over pages. Wouldn't \vfil be better?  Wait until the
+       % problem manifests itself, so it can be fixed for real --karl.
+    }%
+  }%
+  %
+  \parsearg\domultitable
+}
+\def\domultitable#1{%
+  % To parse everything between @multitable and @item:
+  \setuptable#1 \endsetuptable
+  %
+  % This preamble sets up a generic column definition, which will
+  % be used as many times as user calls for columns.
+  % \vtop will set a single line and will also let text wrap and
+  % continue for many paragraphs if desired.
+  \halign\bgroup &%
+    \global\advance\colcount by 1
+    \multistrut
+    \vtop{%
+      % Use the current \colcount to find the correct column width:
+      \hsize=\expandafter\csname col\the\colcount\endcsname
+      %
+      % In order to keep entries from bumping into each other
+      % we will add a \leftskip of \multitablecolspace to all columns after
+      % the first one.
+      %
+      % If a template has been used, we will add \multitablecolspace
+      % to the width of each template entry.
+      %
+      % If the user has set preamble in terms of percent of \hsize we will
+      % use that dimension as the width of the column, and the \leftskip
+      % will keep entries from bumping into each other.  Table will start at
+      % left margin and final column will justify at right margin.
+      %
+      % Make sure we don't inherit \rightskip from the outer environment.
+      \rightskip=0pt
+      \ifnum\colcount=1
+       % The first column will be indented with the surrounding text.
+       \advance\hsize by\leftskip
+      \else
+       \ifsetpercent \else
+         % If user has not set preamble in terms of percent of \hsize
+         % we will advance \hsize by \multitablecolspace.
+         \advance\hsize by \multitablecolspace
+       \fi
+       % In either case we will make \leftskip=\multitablecolspace:
+      \leftskip=\multitablecolspace
+      \fi
+      % Ignoring space at the beginning and end avoids an occasional spurious
+      % blank line, when TeX decides to break the line at the space before the
+      % box from the multistrut, so the strut ends up on a line by itself.
+      % For example:
+      % @multitable @columnfractions .11 .89
+      % @item @code{#}
+      % @tab Legal holiday which is valid in major parts of the whole country.
+      % Is automatically provided with highlighting sequences respectively
+      % marking characters.
+      \noindent\ignorespaces##\unskip\multistrut
+    }\cr
+}
+\def\Emultitable{%
+  \crcr
+  \egroup % end the \halign
+  \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+  \def\multistrut{\strut}% just use the standard line spacing
+  %
+  % Compute \multitablelinespace (if not defined by user) for use in
+  % \multitableparskip calculation.  We used define \multistrut based on
+  % this, but (ironically) that caused the spacing to be off.
+  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%%        If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                      %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+                                      %% than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed.  They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested.  But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+  \expandafter\let\csname #1\endcsname = \relax
+  \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+  % Scan in ``verbatim'' mode:
+  \obeylines
+  \catcode`\@ = \other
+  \catcode`\{ = \other
+  \catcode`\} = \other
+  %
+  % Make sure that spaces turn into tokens that match what \doignoretext wants.
+  \spaceisspace
+  %
+  % Count number of #1's that we've seen.
+  \doignorecount = 0
+  %
+  % Swallow text until we reach the matching `@end #1'.
+  \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+  \obeylines %
+  %
+  \gdef\dodoignore#1{%
+    % #1 contains the command name as a string, e.g., `ifinfo'.
+    %
+    % Define a command to find the next `@end #1'.
+    \long\def\doignoretext##1^^M@end #1{%
+      \doignoretextyyy##1^^M@#1\_STOP_}%
+    %
+    % And this command to find another #1 command, at the beginning of a
+    % line.  (Otherwise, we would consider a line `@c @ifset', for
+    % example, to count as an @ifset for nesting.)
+    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+    %
+    % And now expand that command.
+    \doignoretext ^^M%
+  }%
+}
+
+\def\doignoreyyy#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty                      % Nothing found.
+    \let\next\doignoretextzzz
+  \else                                        % Found a nested condition, ...
+    \advance\doignorecount by 1
+    \let\next\doignoretextyyy          % ..., look for another.
+    % If we're here, #1 ends with ^^M\ifinfo (for example).
+  \fi
+  \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+  \ifnum\doignorecount = 0     % We have just found the outermost @end.
+    \let\next\enddoignore
+  \else                                % Still inside a nested condition.
+    \advance\doignorecount by -1
+    \let\next\doignoretext      % Look for the next @end.
+  \fi
+  \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+  % Ignore anything after the last `@end #1'; this matters in verbatim
+  % environments, where otherwise the newline after an ignored conditional
+  % would result in a blank line in the output.
+  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+  {%
+    \makevalueexpandable
+    \def\temp{#2}%
+    \edef\next{\gdef\makecsname{SET#1}}%
+    \ifx\temp\empty
+      \next{}%
+    \else
+      \setzzz#2\endsetzzz
+    \fi
+  }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+  {%
+    \makevalueexpandable
+    \global\expandafter\let\csname SET#1\endcsname=\relax
+  }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+  \catcode`\- = \active \catcode`\_ = \active
+  %
+  \gdef\makevalueexpandable{%
+    \let\value = \expandablevalue
+    % We don't want these characters active, ...
+    \catcode`\-=\other \catcode`\_=\other
+    % ..., but we might end up with active ones in the argument if
+    % we're called from @code, as @code{@value{foo-bar_}}, though.
+    % So \let them to their normal equivalents.
+    \let-\realdash \let_\normalunderscore
+  }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file.  This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+  \expandafter\ifx\csname SET#1\endcsname\relax
+    {[No value for ``#1'']}%
+    \message{Variable `#1', used in @value, is not set.}%
+  \else
+    \csname SET#1\endcsname
+  \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+  {%
+    \makevalueexpandable
+    \let\next=\empty
+    \expandafter\ifx\csname SET#2\endcsname\relax
+      #1% If not set, redefine \next.
+    \fi
+    \expandafter
+  }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @dircategory CATEGORY  -- specify a category of the dir file
+% which this file should belong to.  Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index.  The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
+    \noexpand\doindex{#1}}
+}
+
+% @defindex foo  ==  \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+  \iflinks
+    \expandafter\newwrite \csname#1indfile\endcsname
+    \openout \csname#1indfile\endcsname \jobname.#1
+  \fi
+  \expandafter\xdef\csname#1index\endcsname{%
+    \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar    makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar   similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+  % Only do \closeout if we haven't already done it, else we'll end up
+  % closing the target index.
+  \expandafter \ifx\csname donesynindex#2\endcsname \relax
+    % The \closeout helps reduce unnecessary open files; the limit on the
+    % Acorn RISC OS is a mere 16 files.
+    \expandafter\closeout\csname#2indfile\endcsname
+    \expandafter\let\csname donesynindex#2\endcsname = 1
+  \fi
+  % redefine \fooindfile:
+  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+  \expandafter\let\csname#2indfile\endcsname=\temp
+  % redefine \fooindex:
+  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+%  and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+  \escapechar = `\\     % use backslash in output files.
+  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+  \def\ {\realbackslash\space }%
+  %
+  % Need these in case \tex is in effect and \{ is a \delimiter again.
+  % But can't use \lbracecmd and \rbracecmd because texindex assumes
+  % braces and backslashes are used only as delimiters.
+  \let\{ = \mylbrace
+  \let\} = \myrbrace
+  %
+  % I don't entirely understand this, but when an index entry is
+  % generated from a macro call, the \endinput which \scanmacro inserts
+  % causes processing to be prematurely terminated.  This is,
+  % apparently, because \indexsorttmp is fully expanded, and \endinput
+  % is an expandable command.  The redefinition below makes \endinput
+  % disappear altogether for that purpose -- although logging shows that
+  % processing continues to some further point.  On the other hand, it
+  % seems \endinput does not hurt in the printed index arg, since that
+  % is still getting written without apparent harm.
+  %
+  % Sample source (mac-idx3.tex, reported by Graham Percival to
+  % help-texinfo, 22may06):
+  % @macro funindex {WORD}
+  % @findex xyz
+  % @end macro
+  % ...
+  % @funindex commtest
+  %
+  % The above is not enough to reproduce the bug, but it gives the flavor.
+  %
+  % Sample whatsit resulting:
+  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+  %
+  % So:
+  \let\endinput = \empty
+  %
+  % Do the redefinitions.
+  \commondummies
+}
+
+% For the aux and toc files, @ is the escape character.  So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files).  When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+  \def\@{@@}%
+  \def\ {@ }%
+  \let\{ = \lbraceatcmd
+  \let\} = \rbraceatcmd
+  %
+  % Do the redefinitions.
+  \commondummies
+  \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+  %
+  % \definedummyword defines \#1 as \string\#1\space, thus effectively
+  % preventing its expansion.  This is used only for control% words,
+  % not control letters, because the \space would be incorrect for
+  % control characters, but is needed to separate the control word
+  % from whatever follows.
+  %
+  % For control letters, we have \definedummyletter, which omits the
+  % space.
+  %
+  % These can be used both for control words that take an argument and
+  % those that do not.  If it is followed by {arg} in the input, then
+  % that will dutifully get written to the index (or wherever).
+  %
+  \def\definedummyword  ##1{\def##1{\string##1\space}}%
+  \def\definedummyletter##1{\def##1{\string##1}}%
+  \let\definedummyaccent\definedummyletter
+  %
+  \commondummiesnofonts
+  %
+  \definedummyletter\_%
+  %
+  % Non-English letters.
+  \definedummyword\AA
+  \definedummyword\AE
+  \definedummyword\DH
+  \definedummyword\L
+  \definedummyword\O
+  \definedummyword\OE
+  \definedummyword\TH
+  \definedummyword\aa
+  \definedummyword\ae
+  \definedummyword\dh
+  \definedummyword\exclamdown
+  \definedummyword\l
+  \definedummyword\o
+  \definedummyword\oe
+  \definedummyword\ordf
+  \definedummyword\ordm
+  \definedummyword\questiondown
+  \definedummyword\ss
+  \definedummyword\th
+  %
+  % Although these internal commands shouldn't show up, sometimes they do.
+  \definedummyword\bf
+  \definedummyword\gtr
+  \definedummyword\hat
+  \definedummyword\less
+  \definedummyword\sf
+  \definedummyword\sl
+  \definedummyword\tclose
+  \definedummyword\tt
+  %
+  \definedummyword\LaTeX
+  \definedummyword\TeX
+  %
+  % Assorted special characters.
+  \definedummyword\bullet
+  \definedummyword\comma
+  \definedummyword\copyright
+  \definedummyword\registeredsymbol
+  \definedummyword\dots
+  \definedummyword\enddots
+  \definedummyword\equiv
+  \definedummyword\error
+  \definedummyword\euro
+  \definedummyword\guillemetleft
+  \definedummyword\guillemetright
+  \definedummyword\guilsinglleft
+  \definedummyword\guilsinglright
+  \definedummyword\expansion
+  \definedummyword\minus
+  \definedummyword\ogonek
+  \definedummyword\pounds
+  \definedummyword\point
+  \definedummyword\print
+  \definedummyword\quotedblbase
+  \definedummyword\quotedblleft
+  \definedummyword\quotedblright
+  \definedummyword\quoteleft
+  \definedummyword\quoteright
+  \definedummyword\quotesinglbase
+  \definedummyword\result
+  \definedummyword\textdegree
+  %
+  % We want to disable all macros so that they are not expanded by \write.
+  \macrolist
+  %
+  \normalturnoffactive
+  %
+  % Handle some cases of @value -- where it does not contain any
+  % (non-fully-expandable) commands.
+  \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+  % Control letters and accents.
+  \definedummyletter\!%
+  \definedummyaccent\"%
+  \definedummyaccent\'%
+  \definedummyletter\*%
+  \definedummyaccent\,%
+  \definedummyletter\.%
+  \definedummyletter\/%
+  \definedummyletter\:%
+  \definedummyaccent\=%
+  \definedummyletter\?%
+  \definedummyaccent\^%
+  \definedummyaccent\`%
+  \definedummyaccent\~%
+  \definedummyword\u
+  \definedummyword\v
+  \definedummyword\H
+  \definedummyword\dotaccent
+  \definedummyword\ogonek
+  \definedummyword\ringaccent
+  \definedummyword\tieaccent
+  \definedummyword\ubaraccent
+  \definedummyword\udotaccent
+  \definedummyword\dotless
+  %
+  % Texinfo font commands.
+  \definedummyword\b
+  \definedummyword\i
+  \definedummyword\r
+  \definedummyword\sc
+  \definedummyword\t
+  %
+  % Commands that take arguments.
+  \definedummyword\acronym
+  \definedummyword\cite
+  \definedummyword\code
+  \definedummyword\command
+  \definedummyword\dfn
+  \definedummyword\email
+  \definedummyword\emph
+  \definedummyword\env
+  \definedummyword\file
+  \definedummyword\kbd
+  \definedummyword\key
+  \definedummyword\math
+  \definedummyword\option
+  \definedummyword\pxref
+  \definedummyword\ref
+  \definedummyword\samp
+  \definedummyword\strong
+  \definedummyword\tie
+  \definedummyword\uref
+  \definedummyword\url
+  \definedummyword\var
+  \definedummyword\verb
+  \definedummyword\w
+  \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names.  It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+  % Accent commands should become @asis.
+  \def\definedummyaccent##1{\let##1\asis}%
+  % We can just ignore other control letters.
+  \def\definedummyletter##1{\let##1\empty}%
+  % Hopefully, all control words can become @asis.
+  \let\definedummyword\definedummyaccent
+  %
+  \commondummiesnofonts
+  %
+  % Don't no-op \tt, since it isn't a user-level command
+  % and is used in the definitions of the active chars like <, >, |, etc.
+  % Likewise with the other plain tex font commands.
+  %\let\tt=\asis
+  %
+  \def\ { }%
+  \def\@{@}%
+  % how to handle braces?
+  \def\_{\normalunderscore}%
+  %
+  % Non-English letters.
+  \def\AA{AA}%
+  \def\AE{AE}%
+  \def\DH{DZZ}%
+  \def\L{L}%
+  \def\OE{OE}%
+  \def\O{O}%
+  \def\TH{ZZZ}%
+  \def\aa{aa}%
+  \def\ae{ae}%
+  \def\dh{dzz}%
+  \def\exclamdown{!}%
+  \def\l{l}%
+  \def\oe{oe}%
+  \def\ordf{a}%
+  \def\ordm{o}%
+  \def\o{o}%
+  \def\questiondown{?}%
+  \def\ss{ss}%
+  \def\th{zzz}%
+  %
+  \def\LaTeX{LaTeX}%
+  \def\TeX{TeX}%
+  %
+  % Assorted special characters.
+  % (The following {} will end up in the sort string, but that's ok.)
+  \def\bullet{bullet}%
+  \def\comma{,}%
+  \def\copyright{copyright}%
+  \def\dots{...}%
+  \def\enddots{...}%
+  \def\equiv{==}%
+  \def\error{error}%
+  \def\euro{euro}%
+  \def\expansion{==>}%
+  \def\guillemetleft{<<}%
+  \def\guillemetright{>>}%
+  \def\guilsinglleft{<}%
+  \def\guilsinglright{>}%
+  \def\minus{-}%
+  \def\point{.}%
+  \def\pounds{pounds}%
+  \def\print{-|}%
+  \def\quotedblbase{"}%
+  \def\quotedblleft{"}%
+  \def\quotedblright{"}%
+  \def\quoteleft{`}%
+  \def\quoteright{'}%
+  \def\quotesinglbase{,}%
+  \def\registeredsymbol{R}%
+  \def\result{=>}%
+  \def\textdegree{o}%
+  %
+  % We need to get rid of all macros, leaving only the arguments (if present).
+  % Of course this is not nearly correct, but it is the best we can do for now.
+  % makeinfo does not expand macros in the argument to @deffn, which ends up
+  % writing an index entry, and texindex isn't prepared for an index sort entry
+  % that starts with \.
+  %
+  % Since macro invocations are followed by braces, we can just redefine them
+  % to take a single TeX argument.  The case of a macro invocation that
+  % goes to end-of-line is not handled.
+  %
+  \macrolist
+}
+
+\let\indexbackslash=0  %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+  \iflinks
+  {%
+    % Store the main index entry text (including the third arg).
+    \toks0 = {#2}%
+    % If third arg is present, precede it with a space.
+    \def\thirdarg{#3}%
+    \ifx\thirdarg\empty \else
+      \toks0 = \expandafter{\the\toks0 \space #3}%
+    \fi
+    %
+    \edef\writeto{\csname#1indfile\endcsname}%
+    %
+    \safewhatsit\dosubindwrite
+  }%
+  \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+  % Put the index entry in the margin if desired.
+  \ifx\SETmarginindex\relax\else
+    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+  \fi
+  %
+  % Remember, we are within a group.
+  \indexdummies % Must do this here, since \bf, etc expand at this stage
+  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+      % so it will be output as is; and it will print as backslash.
+  %
+  % Process the index entry with all font commands turned off, to
+  % get the string to sort by.
+  {\indexnofonts
+   \edef\temp{\the\toks0}% need full expansion
+   \xdef\indexsorttmp{\temp}%
+  }%
+  %
+  % Set up the complete index entry, with both the sort key and
+  % the original text, including any font commands.  We write
+  % three arguments to \entry to the .?? file (four in the
+  % subentry case), texindex reduces to two when writing the .??s
+  % sorted result.
+  \edef\temp{%
+    \write\writeto{%
+      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+  }%
+  \temp
+}
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again.  Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero.  The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode.  We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip.  \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip.  The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{%
+\ifhmode
+  #1%
+\else
+  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+  \whatsitskip = \lastskip
+  \edef\lastskipmacro{\the\lastskip}%
+  \whatsitpenalty = \lastpenalty
+  %
+  % If \lastskip is nonzero, that means the last item was a
+  % skip.  And since a skip is discardable, that means this
+  % -\whatsitskip glue we're inserting is preceded by a
+  % non-discardable item, therefore it is not a potential
+  % breakpoint, therefore no \nobreak needed.
+  \ifx\lastskipmacro\zeroskipmacro
+  \else
+    \vskip-\whatsitskip
+  \fi
+  %
+  #1%
+  %
+  \ifx\lastskipmacro\zeroskipmacro
+    % If \lastskip was zero, perhaps the last item was a penalty, and
+    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
+    % to re-insert the same penalty (values >10000 are used for various
+    % signals); since we just inserted a non-discardable item, any
+    % following glue (such as a \parskip) would be a breakpoint.  For example:
+    %
+    %   @deffn deffn-whatever
+    %   @vindex index-whatever
+    %   Description.
+    % would allow a break between the index-whatever whatsit
+    % and the "Description." paragraph.
+    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+  \else
+    % On the other hand, if we had a nonzero \lastskip,
+    % this make-up glue would be preceded by a non-discardable item
+    % (the whatsit from the \write), so we must insert a \nobreak.
+    \nobreak\vskip\whatsitskip
+  \fi
+\fi
+}
+
+% The index entry written in the file actually looks like
+%  \entry {sortstring}{page}{topic}
+% or
+%  \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+%  \initial {c}
+%     before the first topic whose initial is c
+%  \entry {topic}{pagelist}
+%     for a topic that is used without subtopics
+%  \primary {topic}
+%     for the beginning of a topic that is used with subtopics
+%  \secondary {subtopic}{pagelist}
+%     for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+  \dobreak \chapheadingskip{10000}%
+  %
+  \smallfonts \rm
+  \tolerance = 9500
+  \plainfrenchspacing
+  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+  %
+  % See if the index file exists and is nonempty.
+  % Change catcode of @ here so that if the index file contains
+  % \initial {@}
+  % as its first line, TeX doesn't complain about mismatched braces
+  % (because it thinks @} is a control sequence).
+  \catcode`\@ = 11
+  \openin 1 \jobname.#1s
+  \ifeof 1
+    % \enddoublecolumns gets confused if there is no text in the index,
+    % and it loses the chapter title and the aux file entries for the
+    % index.  The easiest way to prevent this problem is to make sure
+    % there is some text.
+    \putwordIndexNonexistent
+  \else
+    %
+    % If the index file exists but is empty, then \openin leaves \ifeof
+    % false.  We have to make TeX try to read something from the file, so
+    % it can discover if there is anything in it.
+    \read 1 to \temp
+    \ifeof 1
+      \putwordIndexIsEmpty
+    \else
+      % Index files are almost Texinfo source, but we use \ as the escape
+      % character.  It would be better to use @, but that's too big a change
+      % to make right now.
+      \def\indexbackslash{\backslashcurfont}%
+      \catcode`\\ = 0
+      \escapechar = `\\
+      \begindoublecolumns
+      \input \jobname.#1s
+      \enddoublecolumns
+    \fi
+  \fi
+  \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+  % Some minor font changes for the special characters.
+  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+  %
+  % Remove any glue we may have, we'll be inserting our own.
+  \removelastskip
+  %
+  % We like breaks before the index initials, so insert a bonus.
+  \nobreak
+  \vskip 0pt plus 3\baselineskip
+  \penalty 0
+  \vskip 0pt plus -3\baselineskip
+  %
+  % Typeset the initial.  Making this add up to a whole number of
+  % baselineskips increases the chance of the dots lining up from column
+  % to column.  It still won't often be perfect, because of the stretch
+  % we need before each entry, but it's better.
+  %
+  % No shrink because it confuses \balancecolumns.
+  \vskip 1.67\baselineskip plus .5\baselineskip
+  \leftline{\secbf #1}%
+  % Do our best not to break after the initial.
+  \nobreak
+  \vskip .33\baselineskip plus .1\baselineskip
+}}
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin.  It is used for index
+% and table of contents entries.  The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+%      \def\entry#1#2{...
+% But this freezes the catcodes in the argument, and can cause problems to
+% @code, which sets - active.  This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+%
+% The right solution is to prevent \entry from swallowing the whole text.
+%                                 --kasal, 21nov03
+\def\entry{%
+  \begingroup
+    %
+    % Start a new paragraph if necessary, so our assignments below can't
+    % affect previous text.
+    \par
+    %
+    % Do not fill out the last line with white space.
+    \parfillskip = 0in
+    %
+    % No extra space above this paragraph.
+    \parskip = 0in
+    %
+    % Do not prefer a separate line ending with a hyphen to fewer lines.
+    \finalhyphendemerits = 0
+    %
+    % \hangindent is only relevant when the entry text and page number
+    % don't both fit on one line.  In that case, bob suggests starting the
+    % dots pretty far over on the line.  Unfortunately, a large
+    % indentation looks wrong when the entry text itself is broken across
+    % lines.  So we use a small indentation and put up with long leaders.
+    %
+    % \hangafter is reset to 1 (which is the value we want) at the start
+    % of each paragraph, so we need not do anything with that.
+    \hangindent = 2em
+    %
+    % When the entry text needs to be broken, just fill out the first line
+    % with blank space.
+    \rightskip = 0pt plus1fil
+    %
+    % A bit of stretch before each entry for the benefit of balancing
+    % columns.
+    \vskip 0pt plus1pt
+    %
+    % Swallow the left brace of the text (first parameter):
+    \afterassignment\doentry
+    \let\temp =
+}
+\def\doentry{%
+    \bgroup % Instead of the swallowed brace.
+      \noindent
+      \aftergroup\finishentry
+      % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+    % #1 is the page number.
+    %
+    % The following is kludged to not output a line of dots in the index if
+    % there are no page numbers.  The next person who breaks this will be
+    % cursed by a Unix daemon.
+    \setbox\boxA = \hbox{#1}%
+    \ifdim\wd\boxA = 0pt
+      \ %
+    \else
+      %
+      % If we must, put the page number on a line of its own, and fill out
+      % this line with blank space.  (The \hfil is overwhelmed with the
+      % fill leaders glue in \indexdotfill if the page number does fit.)
+      \hfil\penalty50
+      \null\nobreak\indexdotfill % Have leaders before the page number.
+      %
+      % The `\ ' here is removed by the implicit \unskip that TeX does as
+      % part of (the primitive) \par.  Without it, a spurious underfull
+      % \hbox ensues.
+      \ifpdf
+       \pdfgettoks#1.%
+       \ \the\toksA
+      \else
+       \ #1%
+      \fi
+    \fi
+    \par
+  \endgroup
+}
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+\def\indexdotfill{\cleaders
+  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+  \parfillskip=0in
+  \parskip=0in
+  \hangindent=1in
+  \hangafter=1
+  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+  \ifpdf
+    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+  \else
+    #2
+  \fi
+  \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+  % Grab any single-column material above us.
+  \output = {%
+    %
+    % Here is a possibility not foreseen in manmac: if we accumulate a
+    % whole lot of material, we might end up calling this \output
+    % routine twice in a row (see the doublecol-lose test, which is
+    % essentially a couple of indexes with @setchapternewpage off).  In
+    % that case we just ship out what is in \partialpage with the normal
+    % output routine.  Generally, \partialpage will be empty when this
+    % runs and this will be a no-op.  See the indexspread.tex test case.
+    \ifvoid\partialpage \else
+      \onepageout{\pagecontents\partialpage}%
+    \fi
+    %
+    \global\setbox\partialpage = \vbox{%
+      % Unvbox the main output page.
+      \unvbox\PAGE
+      \kern-\topskip \kern\baselineskip
+    }%
+  }%
+  \eject % run that output routine to set \partialpage
+  %
+  % Use the double-column output routine for subsequent pages.
+  \output = {\doublecolumnout}%
+  %
+  % Change the page size parameters.  We could do this once outside this
+  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+  % format, but then we repeat the same computation.  Repeating a couple
+  % of assignments once per index is clearly meaningless for the
+  % execution time, so we may as well do it in one place.
+  %
+  % First we halve the line length, less a little for the gutter between
+  % the columns.  We compute the gutter based on the line length, so it
+  % changes automatically with the paper format.  The magic constant
+  % below is chosen so that the gutter has the same value (well, +-<1pt)
+  % as it did when we hard-coded it.
+  %
+  % We put the result in a separate register, \doublecolumhsize, so we
+  % can restore it in \pagesofar, after \hsize itself has (potentially)
+  % been clobbered.
+  %
+  \doublecolumnhsize = \hsize
+    \advance\doublecolumnhsize by -.04154\hsize
+    \divide\doublecolumnhsize by 2
+  \hsize = \doublecolumnhsize
+  %
+  % Double the \vsize as well.  (We don't need a separate register here,
+  % since nobody clobbers \vsize.)
+  \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+  \splittopskip=\topskip \splitmaxdepth=\maxdepth
+  % Get the available space for the double columns -- the normal
+  % (undoubled) page height minus any material left over from the
+  % previous page.
+  \dimen@ = \vsize
+  \divide\dimen@ by 2
+  \advance\dimen@ by -\ht\partialpage
+  %
+  % box0 will be the left-hand column, box2 the right.
+  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+  \onepageout\pagesofar
+  \unvbox255
+  \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+  \unvbox\partialpage
+  %
+  \hsize = \doublecolumnhsize
+  \wd0=\hsize \wd2=\hsize
+  \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+  % The following penalty ensures that the page builder is exercised
+  % _before_ we change the output routine.  This is necessary in the
+  % following situation:
+  %
+  % The last section of the index consists only of a single entry.
+  % Before this section, \pagetotal is less than \pagegoal, so no
+  % break occurs before the last section starts.  However, the last
+  % section, consisting of \initial and the single \entry, does not
+  % fit on the page and has to be broken off.  Without the following
+  % penalty the page builder will not be exercised until \eject
+  % below, and by that time we'll already have changed the output
+  % routine to the \balancecolumns version, so the next-to-last
+  % double-column page will be processed with \balancecolumns, which
+  % is wrong:  The two columns will go to the main vertical list, with
+  % the broken-off section in the recent contributions.  As soon as
+  % the output routine finishes, TeX starts reconsidering the page
+  % break.  The two columns and the broken-off section both fit on the
+  % page, because the two columns now take up only half of the page
+  % goal.  When TeX sees \eject from below which follows the final
+  % section, it invokes the new output routine that we've set after
+  % \balancecolumns below; \onepageout will try to fit the two columns
+  % and the final section into the vbox of \pageheight (see
+  % \pagebody), causing an overfull box.
+  %
+  % Note that glue won't work here, because glue does not exercise the
+  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+  \penalty0
+  %
+  \output = {%
+    % Split the last of the double-column material.  Leave it on the
+    % current page, no automatic page break.
+    \balancecolumns
+    %
+    % If we end up splitting too much material for the current page,
+    % though, there will be another page break right after this \output
+    % invocation ends.  Having called \balancecolumns once, we do not
+    % want to call it again.  Therefore, reset \output to its normal
+    % definition right away.  (We hope \balancecolumns will never be
+    % called on to balance too much material, but if it is, this makes
+    % the output somewhat more palatable.)
+    \global\output = {\onepageout{\pagecontents\PAGE}}%
+  }%
+  \eject
+  \endgroup % started in \begindoublecolumns
+  %
+  % \pagegoal was set to the doubled \vsize above, since we restarted
+  % the current page.  We're now back to normal single-column
+  % typesetting, so reset \pagegoal to the normal \vsize (after the
+  % \endgroup where \vsize got restored).
+  \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+  \dimen@ = \ht0
+  \advance\dimen@ by \topskip
+  \advance\dimen@ by-\baselineskip
+  \divide\dimen@ by 2 % target to split to
+  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+  \splittopskip = \topskip
+  % Loop until we get a decent breakpoint.
+  {%
+    \vbadness = 10000
+    \loop
+      \global\setbox3 = \copy0
+      \global\setbox1 = \vsplit3 to \dimen@
+    \ifdim\ht3>\dimen@
+      \global\advance\dimen@ by 1pt
+    \repeat
+  }%
+  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+  \setbox0=\vbox to\dimen@{\unvbox1}%
+  \setbox2=\vbox to\dimen@{\unvbox3}%
+  %
+  \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% \unnumberedno is an oxymoron, of course.  But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number".  We avoid collisions with chapter
+% numbers by starting them at 10000.  (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno        \secno=0
+\newcount\subsecno     \subsecno=0
+\newcount\subsubsecno  \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno  \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+  \ifnum\appendixno=`A A%
+  \else\ifnum\appendixno=`B B%
+  \else\ifnum\appendixno=`C C%
+  \else\ifnum\appendixno=`D D%
+  \else\ifnum\appendixno=`E E%
+  \else\ifnum\appendixno=`F F%
+  \else\ifnum\appendixno=`G G%
+  \else\ifnum\appendixno=`H H%
+  \else\ifnum\appendixno=`I I%
+  \else\ifnum\appendixno=`J J%
+  \else\ifnum\appendixno=`K K%
+  \else\ifnum\appendixno=`L L%
+  \else\ifnum\appendixno=`M M%
+  \else\ifnum\appendixno=`N N%
+  \else\ifnum\appendixno=`O O%
+  \else\ifnum\appendixno=`P P%
+  \else\ifnum\appendixno=`Q Q%
+  \else\ifnum\appendixno=`R R%
+  \else\ifnum\appendixno=`S S%
+  \else\ifnum\appendixno=`T T%
+  \else\ifnum\appendixno=`U U%
+  \else\ifnum\appendixno=`V V%
+  \else\ifnum\appendixno=`W W%
+  \else\ifnum\appendixno=`X X%
+  \else\ifnum\appendixno=`Y Y%
+  \else\ifnum\appendixno=`Z Z%
+  % The \the is necessary, despite appearances, because \appendixletter is
+  % expanded while writing the .toc file.  \char\appendixno is not
+  % expandable, thus it is written literally, thus all appendixes come out
+  % with the same letter (or @) in the toc without it.
+  \else\char\the\appendixno
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter.  Page headings and footings can use
+% these.  @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+  % Compute the abs. sec. level:
+  \absseclevel=#2
+  \advance\absseclevel by \secbase
+  % Make sure \absseclevel doesn't fall outside the range:
+  \ifnum \absseclevel < 0
+    \absseclevel = 0
+  \else
+    \ifnum \absseclevel > 3
+      \absseclevel = 3
+    \fi
+  \fi
+  % The heading type:
+  \def\headtype{#1}%
+  \if \headtype U%
+    \ifnum \absseclevel < \unmlevel
+      \chardef\unmlevel = \absseclevel
+    \fi
+  \else
+    % Check for appendix sections:
+    \ifnum \absseclevel = 0
+      \edef\chapheadtype{\headtype}%
+    \else
+      \if \headtype A\if \chapheadtype N%
+       \errmessage{@appendix... within a non-appendix chapter}%
+      \fi\fi
+    \fi
+    % Check for numbered within unnumbered:
+    \ifnum \absseclevel > \unmlevel
+      \def\headtype{U}%
+    \else
+      \chardef\unmlevel = 3
+    \fi
+  \fi
+  % Now print the heading:
+  \if \headtype U%
+    \ifcase\absseclevel
+       \unnumberedzzz{#3}%
+    \or \unnumberedseczzz{#3}%
+    \or \unnumberedsubseczzz{#3}%
+    \or \unnumberedsubsubseczzz{#3}%
+    \fi
+  \else
+    \if \headtype A%
+      \ifcase\absseclevel
+         \appendixzzz{#3}%
+      \or \appendixsectionzzz{#3}%
+      \or \appendixsubseczzz{#3}%
+      \or \appendixsubsubseczzz{#3}%
+      \fi
+    \else
+      \ifcase\absseclevel
+         \chapterzzz{#3}%
+      \or \seczzz{#3}%
+      \or \numberedsubseczzz{#3}%
+      \or \numberedsubsubseczzz{#3}%
+      \fi
+    \fi
+  \fi
+  \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v.  By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+  % section resetting is \global in case the chapter is in a group, such
+  % as an @include file.
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\chapno by 1
+  %
+  % Used for \float.
+  \gdef\chaplevelprefix{\the\chapno.}%
+  \resetallfloatnos
+  %
+  % \putwordChapter can contain complex things in translations.
+  \toks0=\expandafter{\putwordChapter}%
+  \message{\the\toks0 \space \the\chapno}%
+  %
+  % Write the actual heading.
+  \chapmacro{#1}{Ynumbered}{\the\chapno}%
+  %
+  % So @section and the like are numbered underneath this chapter.
+  \global\let\section = \numberedsec
+  \global\let\subsection = \numberedsubsec
+  \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\appendixno by 1
+  \gdef\chaplevelprefix{\appendixletter.}%
+  \resetallfloatnos
+  %
+  % \putwordAppendix can contain complex things in translations.
+  \toks0=\expandafter{\putwordAppendix}%
+  \message{\the\toks0 \space \appendixletter}%
+  %
+  \chapmacro{#1}{Yappendix}{\appendixletter}%
+  %
+  \global\let\section = \appendixsec
+  \global\let\subsection = \appendixsubsec
+  \global\let\subsubsection = \appendixsubsubsec
+}
+
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+    \global\advance\unnumberedno by 1
+  %
+  % Since an unnumbered has no number, no prefix for figures.
+  \global\let\chaplevelprefix = \empty
+  \resetallfloatnos
+  %
+  % This used to be simply \message{#1}, but TeX fully expands the
+  % argument to \message.  Therefore, if #1 contained @-commands, TeX
+  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
+  % expanded @cite (which turns out to cause errors because \cite is meant
+  % to be executed, not expanded).
+  %
+  % Anyway, we don't want the fully-expanded definition of @cite to appear
+  % as a result of the \message, we just want `@cite' itself.  We use
+  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+  % simply yielding the contents of <toks register>.  (We also do this for
+  % the toc entries.)
+  \toks0 = {#1}%
+  \message{(\the\toks0)}%
+  %
+  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+  %
+  \global\let\section = \unnumberedsec
+  \global\let\subsection = \unnumberedsubsec
+  \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+  % Well, we could do the following in a group, but that would break
+  % an assumption that \chapmacro is called at the outermost level.
+  % Thus we are safer this way:                --kasal, 24feb04
+  \let\centerparametersmaybe = \centerparameters
+  \unnmhead0{#1}%
+  \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
+  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+  \global\subsubsecno=0  \global\advance\subsecno by 1
+  \sectionheading{#1}{subsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynumbered}%
+                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Yappendix}%
+                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+  \global\advance\subsubsecno by 1
+  \sectionheading{#1}{subsubsec}{Ynothing}%
+                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+%       1) We use \vbox rather than the earlier \line to permit
+%          overlong headings to fold.
+%       2) \hyphenpenalty is set to 10000 because hyphenation in a
+%          heading is obnoxious; this forbids it.
+%       3) Likewise, headings look best if no \parindent is used, and
+%          if justification is not attempted.  Hence \raggedright.
+
+\def\majorheading{%
+  {\advance\chapheadingskip by 10pt \chapbreak }%
+  \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                    \parindent=0pt\ptexraggedright
+                    \rmisbold #1\hfill}}%
+  \bigskip \par\penalty 200\relax
+  \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+  \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong.  But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+  \chappager
+  \ifodd\pageno \else
+    \begingroup
+      \evenheadline={\hfil}\evenfootline={\hfil}%
+      \oddheadline={\hfil}\oddfootline={\hfil}%
+      \hbox to 0pt{}%
+      \chappager
+    \endgroup
+  \fi
+}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+  % Insert the first mark before the heading break (see notes for \domark).
+  \let\prevchapterdefs=\lastchapterdefs
+  \let\prevsectiondefs=\lastsectiondefs
+  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+                        \gdef\thissection{}}%
+  %
+  \def\temptype{#2}%
+  \ifx\temptype\Ynothingkeyword
+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+                          \gdef\thischapter{\thischaptername}}%
+  \else\ifx\temptype\Yomitfromtockeyword
+    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+                          \gdef\thischapter{}}%
+  \else\ifx\temptype\Yappendixkeyword
+    \toks0={#1}%
+    \xdef\lastchapterdefs{%
+      \gdef\noexpand\thischaptername{\the\toks0}%
+      \gdef\noexpand\thischapternum{\appendixletter}%
+      % \noexpand\putwordAppendix avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+                                 \noexpand\thischapternum:
+                                 \noexpand\thischaptername}%
+    }%
+  \else
+    \toks0={#1}%
+    \xdef\lastchapterdefs{%
+      \gdef\noexpand\thischaptername{\the\toks0}%
+      \gdef\noexpand\thischapternum{\the\chapno}%
+      % \noexpand\putwordChapter avoids expanding indigestible
+      % commands in some of the translations.
+      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+                                 \noexpand\thischapternum:
+                                 \noexpand\thischaptername}%
+    }%
+  \fi\fi\fi
+  %
+  % Output the mark.  Pass it through \safewhatsit, to take care of
+  % the preceding space.
+  \safewhatsit\domark
+  %
+  % Insert the chapter heading break.
+  \pchapsepmacro
+  %
+  % Now the second mark, after the heading break.  No break points
+  % between here and the heading.
+  \let\prevchapterdefs=\lastchapterdefs
+  \let\prevsectiondefs=\lastsectiondefs
+  \domark
+  %
+  {%
+    \chapfonts \rmisbold
+    %
+    % Have to define \lastsection before calling \donoderef, because the
+    % xref code eventually uses it.  On the other hand, it has to be called
+    % after \pchapsepmacro, or the headline will change too soon.
+    \gdef\lastsection{#1}%
+    %
+    % Only insert the separating space if we have a chapter/appendix
+    % number, and don't print the unnumbered ``number''.
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unnchap}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+      \def\toctype{omit}%
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+      \def\toctype{app}%
+    \else
+      \setbox0 = \hbox{#3\enspace}%
+      \def\toctype{numchap}%
+    \fi\fi\fi
+    %
+    % Write the toc entry for this chapter.  Must come before the
+    % \donoderef, because we include the current node name in the toc
+    % entry, and \donoderef resets it to empty.
+    \writetocentry{\toctype}{#1}{#3}%
+    %
+    % For pdftex, we have to write out the node definition (aka, make
+    % the pdfdest) after any page break, but before the actual text has
+    % been typeset.  If the destination for the pdf outline is after the
+    % text, then jumping from the outline may wind up with the text not
+    % being visible, for instance under high magnification.
+    \donoderef{#2}%
+    %
+    % Typeset the actual heading.
+    \nobreak % Avoid page breaks at the interline glue.
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+          \hangindent=\wd0 \centerparametersmaybe
+          \unhbox0 #1\par}%
+  }%
+  \nobreak\bigskip % no page break after a chapter title
+  \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+  \advance\rightskip by 3\rightskip
+  \leftskip = \rightskip
+  \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt\ptexraggedright
+                       \rmisbold #1\hfill}}\bigskip \par\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+                       \parindent=0pt
+                       \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
+}
+\def\CHAPFopen{%
+  \global\let\chapmacro=\chfopen
+  \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles.  These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+  {%
+    % Switch to the right set of fonts.
+    \csname #2fonts\endcsname \rmisbold
+    %
+    \def\sectionlevel{#2}%
+    \def\temptype{#3}%
+    %
+    % Insert first mark before the heading break (see notes for \domark).
+    \let\prevsectiondefs=\lastsectiondefs
+    \ifx\temptype\Ynothingkeyword
+      \ifx\sectionlevel\seckeyword
+        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+                              \gdef\thissection{\thissectionname}}%
+      \fi
+    \else\ifx\temptype\Yomitfromtockeyword
+      % Don't redefine \thissection.
+    \else\ifx\temptype\Yappendixkeyword
+      \ifx\sectionlevel\seckeyword
+        \toks0={#1}%
+        \xdef\lastsectiondefs{%
+          \gdef\noexpand\thissectionname{\the\toks0}%
+          \gdef\noexpand\thissectionnum{#4}%
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
+                                     \noexpand\thissectionname}%
+        }%
+      \fi
+    \else
+      \ifx\sectionlevel\seckeyword
+        \toks0={#1}%
+        \xdef\lastsectiondefs{%
+          \gdef\noexpand\thissectionname{\the\toks0}%
+          \gdef\noexpand\thissectionnum{#4}%
+          % \noexpand\putwordSection avoids expanding indigestible
+          % commands in some of the translations.
+          \gdef\noexpand\thissection{\noexpand\putwordSection{}
+                                     \noexpand\thissectionnum:
+                                     \noexpand\thissectionname}%
+        }%
+      \fi
+    \fi\fi\fi
+    %
+    % Go into vertical mode.  Usually we'll already be there, but we
+    % don't want the following whatsit to end up in a preceding paragraph
+    % if the document didn't happen to have a blank line.
+    \par
+    %
+    % Output the mark.  Pass it through \safewhatsit, to take care of
+    % the preceding space.
+    \safewhatsit\domark
+    %
+    % Insert space above the heading.
+    \csname #2headingbreak\endcsname
+    %
+    % Now the second mark, after the heading break.  No break points
+    % between here and the heading.
+    \let\prevsectiondefs=\lastsectiondefs
+    \domark
+    %
+    % Only insert the space after the number if we have a section number.
+    \ifx\temptype\Ynothingkeyword
+      \setbox0 = \hbox{}%
+      \def\toctype{unn}%
+      \gdef\lastsection{#1}%
+    \else\ifx\temptype\Yomitfromtockeyword
+      % for @headings -- no section number, don't include in toc,
+      % and don't redefine \lastsection.
+      \setbox0 = \hbox{}%
+      \def\toctype{omit}%
+      \let\sectionlevel=\empty
+    \else\ifx\temptype\Yappendixkeyword
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{app}%
+      \gdef\lastsection{#1}%
+    \else
+      \setbox0 = \hbox{#4\enspace}%
+      \def\toctype{num}%
+      \gdef\lastsection{#1}%
+    \fi\fi\fi
+    %
+    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
+    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+    %
+    % Write the node reference (= pdf destination for pdftex).
+    % Again, see comments in \chapmacro.
+    \donoderef{#3}%
+    %
+    % Interline glue will be inserted when the vbox is completed.
+    % That glue will be a valid breakpoint for the page, since it'll be
+    % preceded by a whatsit (usually from the \donoderef, or from the
+    % \writetocentry if there was no node).  We don't want to allow that
+    % break, since then the whatsits could end up on page n while the
+    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
+    \nobreak
+    %
+    % Output the actual section heading.
+    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+          \hangindent=\wd0  % zero if no section number
+          \unhbox0 #1}%
+  }%
+  % Add extra space after the heading -- half of whatever came above it.
+  % Don't allow stretch, though.
+  \kern .5 \csname #2headingskip\endcsname
+  %
+  % Do not let the kern be a potential breakpoint, as it would be if it
+  % was followed by glue.
+  \nobreak
+  %
+  % We'll almost certainly start a paragraph next, so don't let that
+  % glue accumulate.  (Not a breakpoint because it's preceded by a
+  % discardable item.)
+  \vskip-\parskip
+  %
+  % This is purely so the last item on the list is a known \penalty >
+  % 10000.  This is so \startdefun can avoid allowing breakpoints after
+  % section headings.  Otherwise, it would insert a valid breakpoint between:
+  %
+  %   @section sec-whatever
+  %   @deffn def-whatever
+  \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this.  The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything.  This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+  \edef\writetoctype{#1}%
+  \ifx\writetoctype\omitkeyword \else
+    \iftocfileopened\else
+      \immediate\openout\tocfile = \jobname.toc
+      \global\tocfileopenedtrue
+    \fi
+    %
+    \iflinks
+      {\atdummies
+       \edef\temp{%
+         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
+       \temp
+      }%
+    \fi
+  \fi
+  %
+  % Tell \shipout to create a pdf destination on each page, if we're
+  % writing pdf.  These are used in the table of contents.  We can't
+  % just write one on every page because the title pages are numbered
+  % 1 and 2 (the page numbers aren't printed), and so are the first
+  % two pages of the document.  Thus, we'd have two destinations named
+  % `1', and two named `2'.
+  \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care.  This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+  \catcode`\"=\active
+  \catcode`\$=\active
+  \catcode`\<=\active
+  \catcode`\>=\active
+  \catcode`\\=\active
+  \catcode`\^=\active
+  \catcode`\_=\active
+  \catcode`\|=\active
+  \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+  \setupdatafile
+  \activecatcodes
+  \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+  % If @setchapternewpage on, and @headings double, the contents should
+  % start on an odd page, unlike chapters.  Thus, we maintain
+  % \contentsalignmacro in parallel with \pagealignmacro.
+  % From: Torbjorn Granlund <tege@matematik.su.se>
+  \contentsalignmacro
+  \immediate\closeout\tocfile
+  %
+  % Don't need to put `Contents' or `Short Contents' in the headline.
+  % It is abundantly clear what they are.
+  \chapmacro{#1}{Yomitfromtoc}{}%
+  %
+  \savepageno = \pageno
+  \begingroup                  % Set up to handle contents files properly.
+    \raggedbottom              % Worry more about breakpoints than the bottom.
+    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+    %
+    % Roman numerals for page numbers.
+    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+% redefined for the two-volume lispref.  We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+  \startcontents{\putwordTOC}%
+    \openin 1 \tocreadfilename\space
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+    \ifeof 1 \else
+      \pdfmakeoutlines
+    \fi
+    \closein 1
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+  \startcontents{\putwordShortTOC}%
+    %
+    \let\numchapentry = \shortchapentry
+    \let\appentry = \shortchapentry
+    \let\unnchapentry = \shortunnchapentry
+    % We want a true roman here for the page numbers.
+    \secfonts
+    \let\rm=\shortcontrm \let\bf=\shortcontbf
+    \let\sl=\shortcontsl \let\tt=\shortconttt
+    \rm
+    \hyphenpenalty = 10000
+    \advance\baselineskip by 1pt % Open it up a little.
+    \def\numsecentry##1##2##3##4{}
+    \let\appsecentry = \numsecentry
+    \let\unnsecentry = \numsecentry
+    \let\numsubsecentry = \numsecentry
+    \let\appsubsecentry = \numsecentry
+    \let\unnsubsecentry = \numsecentry
+    \let\numsubsubsecentry = \numsecentry
+    \let\appsubsubsecentry = \numsecentry
+    \let\unnsubsubsecentry = \numsecentry
+    \openin 1 \tocreadfilename\space
+    \ifeof 1 \else
+      \readtocfile
+    \fi
+    \closein 1
+    \vfill \eject
+    \contentsalignmacro % in case @setchapternewpage odd is in effect
+  \endgroup
+  \lastnegativepageno = \pageno
+  \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+  % This space should be enough, since a single number is .5em, and the
+  % widest letter (M) is 1em, at least in the Computer Modern fonts.
+  % But use \hss just in case.
+  % (This space doesn't include the extra space that gets added after
+  % the label; that gets put in by \shortchapentry above.)
+  %
+  % We'd like to right-justify chapter numbers, but that looks strange
+  % with appendix letters.  And right-justifying numbers and
+  % left-justifying letters looks strange when there is less than 10
+  % chapters.  Have to read the whole toc once to know how many chapters
+  % there are before deciding ...
+  \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+  % We use M since it's probably the widest letter.
+  \setbox0 = \hbox{\putwordAppendix{} M}%
+  \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+   \begingroup
+     \chapentryfonts
+     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+   \endgroup
+   \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+  \secentryfonts \leftskip=\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+  \subsecentryfonts \leftskip=2\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+  \subsubsecentryfonts \leftskip=3\tocindent
+  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex    escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\envdef\tex{%
+  \setupmarkupstyle{tex}%
+  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+  \catcode `\%=14
+  \catcode `\+=\other
+  \catcode `\"=\other
+  \catcode `\|=\other
+  \catcode `\<=\other
+  \catcode `\>=\other
+  \catcode`\`=\other
+  \catcode`\'=\other
+  \escapechar=`\\
+  %
+  \let\b=\ptexb
+  \let\bullet=\ptexbullet
+  \let\c=\ptexc
+  \let\,=\ptexcomma
+  \let\.=\ptexdot
+  \let\dots=\ptexdots
+  \let\equiv=\ptexequiv
+  \let\!=\ptexexclam
+  \let\i=\ptexi
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \let\{=\ptexlbrace
+  \let\+=\tabalign
+  \let\}=\ptexrbrace
+  \let\/=\ptexslash
+  \let\*=\ptexstar
+  \let\t=\ptext
+  \expandafter \let\csname top\endcsname=\ptextop  % outer
+  \let\frenchspacing=\plainfrenchspacing
+  %
+  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+  \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments.  \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical.  We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+  % =10000 instead of <10000 because of a special case in \itemzzz and
+  % \sectionheading, q.v.
+  \ifnum \lastpenalty=10000 \else
+    \advance\envskipamount by \parskip
+    \endgraf
+    \ifdim\lastskip<\envskipamount
+      \removelastskip
+      % it's not a good place to break if the last penalty was \nobreak
+      % or better ...
+      \ifnum\lastpenalty<10000 \penalty-50 \fi
+      \vskip\envskipamount
+    \fi
+  \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+        \ctl\leaders\hrule height\circthick\hfil\ctr
+        \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+        \cbl\leaders\hrule height\circthick\hfil\cbr
+        \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+  \ifhmode\par\fi  % can't be in the midst of a paragraph.
+  \startsavinginserts
+  \lskip=\leftskip \rskip=\rightskip
+  \leftskip=0pt\rightskip=0pt % we want these *outside*.
+  \cartinner=\hsize \advance\cartinner by-\lskip
+  \advance\cartinner by-\rskip
+  \cartouter=\hsize
+  \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+                               % side, and for 6pt waste from
+                               % each corner char, and rule thickness
+  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+  % Flag to tell @lisp, etc., not to narrow margin.
+  \let\nonarrowing = t%
+  \vbox\bgroup
+      \baselineskip=0pt\parskip=0pt\lineskip=0pt
+      \carttop
+      \hbox\bgroup
+         \hskip\lskip
+         \vrule\kern3pt
+         \vbox\bgroup
+             \kern3pt
+             \hsize=\cartinner
+             \baselineskip=\normbskip
+             \lineskip=\normlskip
+             \parskip=\normpskip
+             \vskip -\parskip
+             \comment % For explanation, see the end of \def\group.
+}
+\def\Ecartouche{%
+              \ifhmode\par\fi
+             \kern3pt
+         \egroup
+         \kern3pt\vrule
+         \hskip\rskip
+      \egroup
+      \cartbot
+  \egroup
+  \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+  \aboveenvbreak
+  \hfuzz = 12pt % Don't be fussy
+  \sepspaces % Make spaces be word-separators rather than space tokens.
+  \let\par = \lisppar % don't ignore blank lines
+  \obeylines % each line of input is a line of output
+  \parskip = 0pt
+  % Turn off paragraph indentation but redefine \indent to emulate
+  % the normal \indent.
+  \nonfillparindent=\parindent
+  \parindent = 0pt
+  \let\indent\nonfillindent
+  %
+  \emergencystretch = 0pt % don't try to avoid overfull boxes
+  \ifx\nonarrowing\relax
+    \advance \leftskip by \lispnarrowing
+    \exdentamount=\lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+%    @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+  \ifx\SETdispenvsize\smallword
+    % end paragraph for sake of leading, in case document has no blank
+    % line.  This is redundant with what happens in \aboveenvbreak, but
+    % we need to do it before changing the fonts, and it's inconvenient
+    % to change the fonts afterward.
+    \ifnum \lastpenalty=10000 \else \endgraf \fi
+    \smallexamplefonts \rm
+  \fi
+}
+\def\setsmalldispenv{%
+  \ifx\SETdispenvsize\nosmallword
+  \else
+    \ifnum \lastpenalty=10000 \else \endgraf \fi
+    \smallexamplefonts \rm
+  \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+  \expandafter\let\csname E#1\endcsname \afterenvbreak
+  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+  \makedispenv{#1}{#3}
+  \makedispenv{#2}{#3}
+}
+
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
+  \nonfillstart
+  \tt\setupmarkupstyle{example}%
+  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+  \gobble       % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+  \nonfillstart
+  \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenv{format}{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  \advance\leftskip by 0pt plus 1fill
+  \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification.  From plain.tex.
+\envdef\raggedright{%
+  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+  \parindent=0pt \leftskip0pt plus2em
+  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+  \hbadness=10000 % Last line will usually be underfull, so turn off
+                  % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+  \hbadness=10000 % Last line will usually be underfull, so turn off
+                  % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins.  We keep \parskip nonzero in general, since
+% we're doing normal filling.  So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\def\quotationstart{%
+  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+  \parindent=0pt
+  %
+  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+  \ifx\nonarrowing\relax
+    \advance\leftskip by \lispnarrowing
+    \advance\rightskip by \lispnarrowing
+    \exdentamount = \lispnarrowing
+  \else
+    \let\nonarrowing = \relax
+  \fi
+  \parsearg\quotationlabel
+}
+
+\envdef\quotation{%
+  \setnormaldispenv
+  \quotationstart
+}
+
+\envdef\smallquotation{%
+  \setsmalldispenv
+  \quotationstart
+}
+\let\Esmallquotation = \Equotation
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+  \par
+  \ifx\quotationauthor\undefined\else
+    % indent a bit.
+    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+  \fi
+  {\parskip=0pt \afterenvbreak}%
+}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+  \def\temp{#1}%
+  \ifx\temp\empty \else
+    {\bf #1: }%
+  \fi
+}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too.  Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+  \do\ \do\\\do\{\do\}\do\$\do\&%
+  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+  \do\<\do\>\do\|\do\@\do+\do\"%
+  % Don't do the quotes -- if we do, @set txicodequoteundirected and
+  % @set txicodequotebacktick will not have effect on @verb and
+  % @verbatim, and ?` and !` ligatures won't get disabled.
+  %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+  \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+  \tt  % easiest (and conventionally used) font for verbatim
+  \def\par{\leavevmode\endgraf}%
+  \setupmarkupstyle{verb}%
+  \tabeightspaces
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+%
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\tabexpand{%
+    \catcode`\^^I=\active
+    \def^^I{\leavevmode\egroup
+      \dimen0=\wd0 % the width so far, or since the previous tab
+      \divide\dimen0 by\tabw
+      \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+      \advance\dimen0 by\tabw  % advance to next multiple of \tabw
+      \wd0=\dimen0 \box0 \starttabbox
+    }%
+  }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+  \let\nonarrowing = t%
+  \nonfillstart
+  % Easiest (and conventionally used) font for verbatim
+  \tt
+  \def\par{\leavevmode\egroup\box0\endgraf}%
+  \tabexpand
+  \setupmarkupstyle{verbatim}%
+  % Respect line breaks,
+  % print special symbols as themselves, and
+  % make each space count
+  % must do in this order:
+  \obeylines \uncatcodespecials \sepspaces
+  \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters.  Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+%    \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+%     \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+  \catcode`\ =\active
+  \obeylines %
+  % ignore everything up to the first ^^M, that's the newline at the end
+  % of the @verbatim input line itself.  Otherwise we get an extra blank
+  % line in the output.
+  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+  % We really want {...\end verbatim} in the body of the macro, but
+  % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+    \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+  {%
+    \makevalueexpandable
+    \setupverbatim
+    \indexnofonts       % Allow `@@' and other weird things in file names.
+    \input #1
+    \afterenvbreak
+  }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+  \begingroup
+    \parindent = 0pt  % paragraph indentation looks wrong on title page
+    \scanexp\copyingtext
+  \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+  \ifnum\lastpenalty<10000
+    \medbreak
+    \defunpenalty=10003 % Will keep this @deffn together with the
+                        % following @def command, see below.
+  \else
+    % If there are two @def commands in a row, we'll have a \nobreak,
+    % which is there to keep the function description together with its
+    % header.  But if there's nothing but headers, we need to allow a
+    % break somewhere.  Check specifically for penalty 10002, inserted
+    % by \printdefunline, instead of 10000, since the sectioning
+    % commands also insert a nobreak penalty, and we don't want to allow
+    % a break between a section heading and a defun.
+    %
+    % As a minor refinement, we avoid "club" headers by signalling
+    % with penalty of 10003 after the very first @deffn in the
+    % sequence (see above), and penalty of 10002 after any following
+    % @def command.
+    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+    %
+    % Similarly, after a section heading, do not allow a break.
+    % But do insert the glue.
+    \medskip  % preceded by discardable penalty, so not a breakpoint
+  \fi
+  %
+  \parindent=0in
+  \advance\leftskip by \defbodyindent
+  \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+  % First, check whether we are in the right environment:
+  \checkenv#1%
+  %
+  % As above, allow line break if we have multiple x headers in a row.
+  % It's not a great place, though.
+  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+  %
+  % And now, it's time to reuse the body of the original defun:
+  \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+  \begingroup
+    % call \deffnheader:
+    #1#2 \endheader
+    % common ending:
+    \interlinepenalty = 10000
+    \advance\rightskip by 0pt plus 1fil
+    \endgraf
+    \nobreak\vskip -\parskip
+    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
+    % Some of the @defun-type tags do not enable magic parentheses,
+    % rendering the following check redundant.  But we don't optimize.
+    \checkparencounts
+  \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+  \expandafter\let\csname E#1\endcsname = \Edefun
+  \edef\temp{\noexpand\domakedefun
+    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+  \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+  \envdef#1{%
+    \startdefun
+    \parseargusing\activeparens{\printdefunline#3}%
+  }%
+  \def#2{\dodefunx#1}%
+  \def#3%
+}
+
+%%% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+  \dosubind{fn}{\code{#3}}{#1}%
+  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+%%% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{fn}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+  \dosubind{vr}{\code{#4}}{#1}%
+  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+  \doind{tp}{\code{#2}}%
+  \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+  % Get the values of \leftskip and \rightskip as they were outside the @def...
+  \advance\leftskip by -\defbodyindent
+  %
+  % How we'll format the type name.  Putting it in brackets helps
+  % distinguish it from the body text that may end up on the next line
+  % just below it.
+  \def\temp{#1}%
+  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+  %
+  % Figure out line sizes for the paragraph shape.
+  % The first line needs space for \box0; but if \rightskip is nonzero,
+  % we need only space for the part of \box0 which exceeds it:
+  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
+  % The continuations:
+  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
+  % (plain.tex says that \dimen1 should be used only as global.)
+  \parshape 2 0in \dimen0 \defargsindent \dimen2
+  %
+  % Put the type name to the right margin.
+  \noindent
+  \hbox to 0pt{%
+    \hfil\box0 \kern-\hsize
+    % \hsize has to be shortened this way:
+    \kern\leftskip
+    % Intentionally do not respect \rightskip, since we need the space.
+  }%
+  %
+  % Allow all lines to be underfull without complaint:
+  \tolerance=10000 \hbadness=10000
+  \exdentamount=\defbodyindent
+  {%
+    % defun fonts. We use typewriter by default (used to be bold) because:
+    % . we're printing identifiers, they should be in tt in principle.
+    % . in languages with many accents, such as Czech or French, it's
+    %   common to leave accents off identifiers.  The result looks ok in
+    %   tt, but exceedingly strange in rm.
+    % . we don't want -- and --- to be treated as ligatures.
+    % . this still does not fix the ?` and !` ligatures, but so far no
+    %   one has made identifiers using them :).
+    \df \tt
+    \def\temp{#2}% return value type
+    \ifx\temp\empty\else \tclose{\temp} \fi
+    #3% output function name
+  }%
+  {\rm\enskip}% hskip 0.5 em of \tenrm
+  %
+  \boldbrax
+  % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name.  This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable.  Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+  % use sl by default (not ttsl),
+  % tt for the names.
+  \df \sl \hyphenchar\font=0
+  %
+  % On the other hand, if an argument has two dashes (for instance), we
+  % want a way to get ttsl.  Let's try @var for that.
+  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+  #1%
+  \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+  \catcode`\(=\active \catcode`\)=\active
+  \catcode`\[=\active \catcode`\]=\active
+  \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc.  For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+  \activeparens
+  \global\let(=\lparen \global\let)=\rparen
+  \global\let[=\lbrack \global\let]=\rbrack
+  \global\let& = \&
+
+  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+  \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+  \ifampseen
+    % At the first level, print parens in roman,
+    % otherwise use the default font.
+    \ifnum \parencount=1 \rm \fi
+  \else
+    % The \sf parens (in \boldbrax) actually are a little bolder than
+    % the contained text.  This is especially needed for [ and ] .
+    \sf
+  \fi
+}
+\def\infirstlevel#1{%
+  \ifampseen
+    \ifnum\parencount=1
+      #1%
+    \fi
+  \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+  \global\advance\parencount by 1
+  {\parenfont(}%
+  \infirstlevel \bfafterword
+}
+\def\clnr{%
+  {\parenfont)}%
+  \infirstlevel \sl
+  \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+  \global\advance\brackcount by 1
+  {\bf[}%
+}
+\def\rbrb{%
+  {\bf]}%
+  \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+  \ifnum\parencount=0 \else \badparencount \fi
+  \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+  \message{Warning: unbalanced parentheses in @def...}%
+  \global\parencount=0
+}
+\def\badbrackcount{%
+  \message{Warning: unbalanced square brackets in @def...}%
+  \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+  \newwrite\macscribble
+  \def\scantokens#1{%
+    \toks0={#1}%
+    \immediate\openout\macscribble=\jobname.tmp
+    \immediate\write\macscribble{\the\toks0}%
+    \immediate\closeout\macscribble
+    \input \jobname.tmp
+  }
+\fi
+
+\def\scanmacro#1{%
+  \begingroup
+    \newlinechar`\^^M
+    \let\xeatspaces\eatspaces
+    % Undo catcode changes of \startcontents and \doprintindex
+    % When called from @insertcopying or (short)caption, we need active
+    % backslash to get it printed correctly.  Previously, we had
+    % \catcode`\\=\other instead.  We'll see whether a problem appears
+    % with macro expansion.                            --kasal, 19aug04
+    \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+    % ... and \example
+    \spaceisspace
+    %
+    % Append \endinput to make sure that TeX does not see the ending newline.
+    % I've verified that it is necessary both for e-TeX and for ordinary TeX
+    %                                                  --kasal, 29nov03
+    \scantokens{#1\endinput}%
+  \endgroup
+}
+
+\def\scanexp#1{%
+  \edef\temp{\noexpand\scanmacro{#1}}%
+  \temp
+}
+
+\newcount\paramno   % Count of parameters
+\newtoks\macname    % Macro name
+\newif\ifrecursive  % Is it recursive?
+
+% List of all defined macros in the form
+%    \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+     \toks0 = \expandafter{\macrolist\definedummyword#1}%
+     \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+%   \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+  \expandafter\let
+  \csname#1\expandafter\endcsname
+  \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion.  Must do this non-globally, to
+% confine the change to the current group.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by  making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\scanctxt{%
+  \catcode`\"=\other
+  \catcode`\+=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\@=\other
+  \catcode`\^=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\~=\other
+  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+}
+
+\def\scanargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+  \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{%
+  \scanctxt
+  \catcode`\{=\other
+  \catcode`\}=\other
+  \catcode`\^^M=\other
+  \usembodybackslash
+}
+
+\def\macroargctxt{%
+  \scanctxt
+  \catcode`\\=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+  \getargs{#1}%           now \macname is the macname and \argl the arglist
+  \ifx\argl\empty       % no arguments
+     \paramno=0%
+  \else
+     \expandafter\parsemargdef \argl;%
+  \fi
+  \if1\csname ismacro.\the\macname\endcsname
+     \message{Warning: redefining \the\macname}%
+  \else
+     \expandafter\ifx\csname \the\macname\endcsname \relax
+     \else \errmessage{Macro name \the\macname\space already defined}\fi
+     \global\cslet{macsave.\the\macname}{\the\macname}%
+     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+     \addtomacrolist{\the\macname}%
+  \fi
+  \begingroup \macrobodyctxt
+  \ifrecursive \expandafter\parsermacbody
+  \else \expandafter\parsemacbody
+  \fi}
+
+\parseargdef\unmacro{%
+  \if1\csname ismacro.#1\endcsname
+    \global\cslet{#1}{macsave.#1}%
+    \global\expandafter\let \csname ismacro.#1\endcsname=0%
+    % Remove the macro name from \macrolist:
+    \begingroup
+      \expandafter\let\csname#1\endcsname \relax
+      \let\definedummyword\unmacrodo
+      \xdef\macrolist{\macrolist}%
+    \endgroup
+  \else
+    \errmessage{Macro #1 not defined}%
+  \fi
+}
+
+% Called by \do from \dounmacro on each macro.  The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+  \ifx #1\relax
+    % remove this
+  \else
+    \noexpand\definedummyword \noexpand#1%
+  \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list.  Set up \paramno and \paramlist
+% so \defmacro knows what to do.  Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX:  let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+        \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+  \if#1;\let\next=\relax
+  \else \let\next=\parsemargdefxxx
+    \advance\paramno by 1%
+    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+        {\xeatspaces{\hash\the\paramno}}%
+    \edef\paramlist{\paramlist\hash\the\paramno,}%
+  \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+  \let\hash=##% convert placeholders to macro parameter chars
+  \ifrecursive
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\scanmacro{\temp}}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+         \egroup\noexpand\scanmacro{\temp}}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+        \csname\the\macname xxx\endcsname
+          \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+    \fi
+  \else
+    \ifcase\paramno
+    % 0
+      \expandafter\xdef\csname\the\macname\endcsname{%
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \or % 1
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \noexpand\braceorline
+         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+        \egroup
+        \noexpand\norecurse{\the\macname}%
+        \noexpand\scanmacro{\temp}\egroup}%
+    \else % many
+      \expandafter\xdef\csname\the\macname\endcsname{%
+         \bgroup\noexpand\macroargctxt
+         \expandafter\noexpand\csname\the\macname xx\endcsname}%
+      \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+          \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+      \expandafter\expandafter
+      \expandafter\xdef
+      \expandafter\expandafter
+      \csname\the\macname xxx\endcsname
+      \paramlist{%
+          \egroup
+          \noexpand\norecurse{\the\macname}%
+          \noexpand\scanmacro{\temp}\egroup}%
+    \fi
+  \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {.  If so it reads up to the closing }, if not, it reads the whole
+% line.  Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+  \ifx\nchar\bgroup\else
+    \expandafter\parsearg
+  \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign.  Just make them active and then expand them all to nothing.
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+  {%
+    \expandafter\let\obeyedspace=\empty
+    \addtomacrolist{#1}%
+    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+  }%
+  \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs    % True if xref values are known.
+\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+  node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references.  The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross,  ,  , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node.  #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+  \ifx\lastnode\empty\else
+    \setref{\lastnode}{#1}%
+    \global\let\lastnode=\empty
+  \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+%                 or the anchor name.
+% 2) NAME-snt   - section number and type, passed as the SNT arg, or
+%                 empty for anchors.
+% 3) NAME-pg    - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat.  In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof   - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+  \pdfmkdest{#1}%
+  \iflinks
+    {%
+      \atdummies  % preserve commands, but don't expand them
+      \edef\writexrdef##1##2{%
+       \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+         ##1}{##2}}% these are parameters of \writexrdef
+      }%
+      \toks0 = \expandafter{\lastsection}%
+      \immediate \writexrdef{title}{\the\toks0 }%
+      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout
+    }%
+  \fi
+}
+
+% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual.  All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+  \unsepspaces
+  \def\printedmanual{\ignorespaces #5}%
+  \def\printedrefname{\ignorespaces #3}%
+  \setbox1=\hbox{\printedmanual\unskip}%
+  \setbox0=\hbox{\printedrefname\unskip}%
+  \ifdim \wd0 = 0pt
+    % No printed node name was explicitly given.
+    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+      % Use the node name inside the square brackets.
+      \def\printedrefname{\ignorespaces #1}%
+    \else
+      % Use the actual chapter/section title appear inside
+      % the square brackets.  Use the real section title if we have it.
+      \ifdim \wd1 > 0pt
+        % It is in another manual, so we don't have it.
+        \def\printedrefname{\ignorespaces #1}%
+      \else
+        \ifhavexrefs
+          % We know the real title if we have the xref values.
+          \def\printedrefname{\refx{#1-title}{}}%
+        \else
+          % Otherwise just copy the Info node name.
+          \def\printedrefname{\ignorespaces #1}%
+        \fi%
+      \fi
+    \fi
+  \fi
+  %
+  % Make link in pdf output.
+  \ifpdf
+    {\indexnofonts
+     \turnoffactive
+     % This expands tokens, so do it after making catcode changes, so _
+     % etc. don't get their TeX definitions.
+     \getfilename{#4}%
+     %
+     % See comments at \activebackslashdouble.
+     {\activebackslashdouble \xdef\pdfxrefdest{#1}%
+      \backslashparens\pdfxrefdest}%
+     %
+     \leavevmode
+     \startlink attr{/Border [0 0 0]}%
+     \ifnum\filenamelength>0
+       goto file{\the\filename.pdf} name{\pdfxrefdest}%
+     \else
+       goto name{\pdfmkpgn{\pdfxrefdest}}%
+     \fi
+    }%
+    \setcolor{\linkcolor}%
+  \fi
+  %
+  % Float references are printed completely differently: "Figure 1.2"
+  % instead of "[somenode], p.3".  We distinguish them by the
+  % LABEL-title being set to a magic string.
+  {%
+    % Have to otherify everything special to allow the \csname to
+    % include an _ in the xref name, etc.
+    \indexnofonts
+    \turnoffactive
+    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+      \csname XR#1-title\endcsname
+  }%
+  \iffloat\Xthisreftitle
+    % If the user specified the print name (third arg) to the ref,
+    % print it instead of our usual "Figure 1.2".
+    \ifdim\wd0 = 0pt
+      \refx{#1-snt}{}%
+    \else
+      \printedrefname
+    \fi
+    %
+    % if the user also gave the printed manual name (fifth arg), append
+    % "in MANUALNAME".
+    \ifdim \wd1 > 0pt
+      \space \putwordin{} \cite{\printedmanual}%
+    \fi
+  \else
+    % node/anchor (non-float) references.
+    %
+    % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+    % insert empty discretionaries after hyphens, which means that it will
+    % not find a line break at a hyphen in a node names.  Since some manuals
+    % are best written with fairly long node names, containing hyphens, this
+    % is a loss.  Therefore, we give the text of the node name again, so it
+    % is as if TeX is seeing it for the first time.
+    \ifdim \wd1 > 0pt
+      \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+    \else
+      % _ (for example) has to be the character _ for the purposes of the
+      % control sequence corresponding to the node, but it has to expand
+      % into the usual \leavevmode...\vrule stuff for purposes of
+      % printing. So we \turnoffactive for the \refx-snt, back on for the
+      % printing, back off for the \refx-pg.
+      {\turnoffactive
+       % Only output a following space if the -snt ref is nonempty; for
+       % @unnumbered and @anchor, it won't be.
+       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+      }%
+      % output the `[mynode]' via a macro so it can be overridden.
+      \xrefprintnodename\printedrefname
+      %
+      % But we always want a comma and a space:
+      ,\space
+      %
+      % output the `page 3'.
+      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+    \fi
+  \fi
+  \endlink
+\endgroup}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output.  It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents.  Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+  \ifnum\secno=0
+    \putwordChapter@tie \the\chapno
+  \else \ifnum\subsecno=0
+    \putwordSection@tie \the\chapno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
+\def\Yappendix{%
+  \ifnum\secno=0
+     \putwordAppendix@tie @char\the\appendixno{}%
+  \else \ifnum\subsecno=0
+     \putwordSection@tie @char\the\appendixno.\the\secno
+  \else \ifnum\subsubsecno=0
+    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+  \else
+    \putwordSection@tie
+      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+  \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+  {%
+    \indexnofonts
+    \otherbackslash
+    \expandafter\global\expandafter\let\expandafter\thisrefX
+      \csname XR#1\endcsname
+  }%
+  \ifx\thisrefX\relax
+    % If not defined, say something at least.
+    \angleleft un\-de\-fined\angleright
+    \iflinks
+      \ifhavexrefs
+        \message{\linenumber Undefined cross reference `#1'.}%
+      \else
+        \ifwarnedxrefs\else
+          \global\warnedxrefstrue
+          \message{Cross reference values unknown; you must run TeX again.}%
+        \fi
+      \fi
+    \fi
+  \else
+    % It's defined, so just use it.
+    \thisrefX
+  \fi
+  #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file.  Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions).  But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+  {% The node name might contain 8-bit characters, which in our current
+   % implementation are changed to commands like @'e.  Don't let these
+   % mess up the control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safexrefname{#1}%
+  }%
+  %
+  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+  %
+  % Was that xref control sequence that we just defined for a float?
+  \expandafter\iffloat\csname XR\safexrefname\endcsname
+    % it was a float, and we have the (safe) float type in \iffloattype.
+    \expandafter\let\expandafter\floatlist
+      \csname floatlist\iffloattype\endcsname
+    %
+    % Is this the first time we've seen this float type?
+    \expandafter\ifx\floatlist\relax
+      \toks0 = {\do}% yes, so just \do
+    \else
+      % had it before, so preserve previous elements in list.
+      \toks0 = \expandafter{\floatlist\do}%
+    \fi
+    %
+    % Remember this xref in the control sequence \floatlistFLOATTYPE,
+    % for later use in \listoffloats.
+    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+      {\safexrefname}}%
+  \fi
+}
+
+% Read the last existing aux file, if any.  No error if none exists.
+%
+\def\tryauxfile{%
+  \openin 1 \jobname.aux
+  \ifeof 1 \else
+    \readdatafile{aux}%
+    \global\havexrefstrue
+  \fi
+  \closein 1
+}
+
+\def\setupdatafile{%
+  \catcode`\^^@=\other
+  \catcode`\^^A=\other
+  \catcode`\^^B=\other
+  \catcode`\^^C=\other
+  \catcode`\^^D=\other
+  \catcode`\^^E=\other
+  \catcode`\^^F=\other
+  \catcode`\^^G=\other
+  \catcode`\^^H=\other
+  \catcode`\^^K=\other
+  \catcode`\^^L=\other
+  \catcode`\^^N=\other
+  \catcode`\^^P=\other
+  \catcode`\^^Q=\other
+  \catcode`\^^R=\other
+  \catcode`\^^S=\other
+  \catcode`\^^T=\other
+  \catcode`\^^U=\other
+  \catcode`\^^V=\other
+  \catcode`\^^W=\other
+  \catcode`\^^X=\other
+  \catcode`\^^Z=\other
+  \catcode`\^^[=\other
+  \catcode`\^^\=\other
+  \catcode`\^^]=\other
+  \catcode`\^^^=\other
+  \catcode`\^^_=\other
+  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
+  % supported in the main text, it doesn't seem desirable.  Furthermore,
+  % that is not enough: for node names that actually contain a ^
+  % character, we would end up writing a line like this: 'xrdef {'hat
+  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+  % argument, and \hat is not an expandable control sequence.  It could
+  % all be worked out, but why?  Either we support ^^ or we don't.
+  %
+  % The other change necessary for this was to define \auxhat:
+  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+  % and then to call \auxhat in \setq.
+  %
+  \catcode`\^=\other
+  %
+  % Special characters.  Should be turned off anyway, but...
+  \catcode`\~=\other
+  \catcode`\[=\other
+  \catcode`\]=\other
+  \catcode`\"=\other
+  \catcode`\_=\other
+  \catcode`\|=\other
+  \catcode`\<=\other
+  \catcode`\>=\other
+  \catcode`\$=\other
+  \catcode`\#=\other
+  \catcode`\&=\other
+  \catcode`\%=\other
+  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+  %
+  % This is to support \ in node names and titles, since the \
+  % characters end up in a \csname.  It's easier than
+  % leaving it active and making its active definition an actual \
+  % character.  What I don't understand is why it works in the *value*
+  % of the xrdef.  Seems like it should be a catcode12 \, and that
+  % should not typeset properly.  But it works, so I'm moving on for
+  % now.  --karl, 15jan04.
+  \catcode`\\=\other
+  %
+  % Make the characters 128-255 be printing characters.
+  {%
+    \count1=128
+    \def\loop{%
+      \catcode\count1=\other
+      \advance\count1 by 1
+      \ifnum \count1<256 \loop \fi
+    }%
+  }%
+  %
+  % @ is our escape character in .aux files, and we need braces.
+  \catcode`\{=1
+  \catcode`\}=2
+  \catcode`\@=0
+}
+
+\def\readdatafile#1{%
+\begingroup
+  \setupdatafile
+  \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes.  Otherwise like plain.
+\gdef\footnote{%
+  \let\indent=\ptexindent
+  \let\noindent=\ptexnoindent
+  \global\advance\footnoteno by \@ne
+  \edef\thisfootno{$^{\the\footnoteno}$}%
+  %
+  % In case the footnote comes at the end of a sentence, preserve the
+  % extra spacing after we do the footnote number.
+  \let\@sf\empty
+  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+  %
+  % Remove inadvertent blank space before typesetting the footnote number.
+  \unskip
+  \thisfootno\@sf
+  \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter.  Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read.  --karl, 16nov96.
+%
+\gdef\dofootnote{%
+  \insert\footins\bgroup
+  % We want to typeset this text as a normal paragraph, even if the
+  % footnote reference occurs in (for example) a display environment.
+  % So reset some parameters.
+  \hsize=\pagewidth
+  \interlinepenalty\interfootnotelinepenalty
+  \splittopskip\ht\strutbox % top baseline for broken footnotes
+  \splitmaxdepth\dp\strutbox
+  \floatingpenalty\@MM
+  \leftskip\z@skip
+  \rightskip\z@skip
+  \spaceskip\z@skip
+  \xspaceskip\z@skip
+  \parindent\defaultparindent
+  %
+  \smallfonts \rm
+  %
+  % Because we use hanging indentation in footnotes, a @noindent appears
+  % to exdent this text, so make it be a no-op.  makeinfo does not use
+  % hanging indentation so @noindent can still be needed within footnote
+  % text after an @example or the like (not that this is good style).
+  \let\noindent = \relax
+  %
+  % Hang the footnote text off the number.  Use \everypar in case the
+  % footnote extends for more than one paragraph.
+  \everypar = {\hang}%
+  \textindent{\thisfootno}%
+  %
+  % Don't crash into the line above the footnote text.  Since this
+  % expands into a box, it must come within the paragraph, lest it
+  % provide a place where TeX can split the footnote.
+  \footstrut
+  \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished.  Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes.  --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+  \ifx \insert\ptexinsert
+    \let\insert\saveinsert
+  \else
+    \let\checkinserts\relax
+  \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+  \afterassignment\next
+  % swallow the left brace
+  \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+    {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
+  \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+  \next
+}
+\def\newsaveinsX #1{%
+  \csname newbox\endcsname #1%
+  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+    \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image.  We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front.  If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+  % Do not bother showing banner with epsf.tex v2.7k (available in
+  % doc/epsf.tex and on ctan).
+  \def\epsfannounce{\toks0 = }%
+  \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+  work.  It is also included in the Texinfo distribution, or you can get
+  it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+  \ifx\epsfbox\undefined
+    \ifwarnednoepsf \else
+      \errhelp = \noepsfhelp
+      \errmessage{epsf.tex not found, images will be ignored}%
+      \global\warnednoepsftrue
+    \fi
+  \else
+    \imagexxx #1,,,,,\finish
+  \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+  \catcode`\^^M = 5     % in case we're inside an example
+  \normalturnoffactive  % allow _ et al. in names
+  % If the image is by itself, center it.
+  \ifvmode
+    \imagevmodetrue
+    \nobreak\medskip
+    % Usually we'll have text after the image which will insert
+    % \parskip glue, so insert it here too to equalize the space
+    % above and below.
+    \nobreak\vskip\parskip
+    \nobreak
+  \fi
+  %
+  % Leave vertical mode so that indentation from an enclosing
+  % environment such as @quotation is respected.  On the other hand, if
+  % it's at the top level, we don't want the normal paragraph indentation.
+  \noindent
+  %
+  % Output the image.
+  \ifpdf
+    \dopdfimage{#1}{#2}{#3}%
+  \else
+    % \epsfbox itself resets \epsf?size at each figure.
+    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+    \epsfbox{#1.eps}%
+  \fi
+  %
+  \ifimagevmode \medskip \fi  % space after the standalone image
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc.  We don't actually implement floating yet, we always include the
+% float "here".  But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label.  Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored.  It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+  \let\thiscaption=\empty
+  \let\thisshortcaption=\empty
+  %
+  % don't lose footnotes inside @float.
+  %
+  % BEWARE: when the floats start float, we have to issue warning whenever an
+  % insert appears inside a float which could possibly float. --kasal, 26may04
+  %
+  \startsavinginserts
+  %
+  % We can't be used inside a paragraph.
+  \par
+  %
+  \vtop\bgroup
+    \def\floattype{#1}%
+    \def\floatlabel{#2}%
+    \def\floatloc{#3}% we do nothing with this yet.
+    %
+    \ifx\floattype\empty
+      \let\safefloattype=\empty
+    \else
+      {%
+        % the floattype might have accents or other special characters,
+        % but we need to use it in a control sequence name.
+        \indexnofonts
+        \turnoffactive
+        \xdef\safefloattype{\floattype}%
+      }%
+    \fi
+    %
+    % If label is given but no type, we handle that as the empty type.
+    \ifx\floatlabel\empty \else
+      % We want each FLOATTYPE to be numbered separately (Figure 1,
+      % Table 1, Figure 2, ...).  (And if no label, no number.)
+      %
+      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+      \global\advance\floatno by 1
+      %
+      {%
+        % This magic value for \lastsection is output by \setref as the
+        % XREFLABEL-title value.  \xrefX uses it to distinguish float
+        % labels (which have a completely different output format) from
+        % node and anchor labels.  And \xrdef uses it to construct the
+        % lists of floats.
+        %
+        \edef\lastsection{\floatmagic=\safefloattype}%
+        \setref{\floatlabel}{Yfloat}%
+      }%
+    \fi
+    %
+    % start with \parskip glue, I guess.
+    \vskip\parskip
+    %
+    % Don't suppress indentation if a float happens to start a section.
+    \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption:    Foo 1.1
+% @float Foo & @caption{Cap}:     Foo: Cap
+% @float Foo & no caption:        Foo
+% @float ,lbl & Caption{Cap}:     1.1: Cap
+% @float ,lbl & no caption:       1.1
+% @float & @caption{Cap}:         Cap
+% @float & no caption:
+%
+\def\Efloat{%
+    \let\floatident = \empty
+    %
+    % In all cases, if we have a float type, it comes first.
+    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+    %
+    % If we have an xref label, the number comes next.
+    \ifx\floatlabel\empty \else
+      \ifx\floattype\empty \else % if also had float type, need tie first.
+        \appendtomacro\floatident{\tie}%
+      \fi
+      % the number.
+      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+    \fi
+    %
+    % Start the printed caption with what we've constructed in
+    % \floatident, but keep it separate; we need \floatident again.
+    \let\captionline = \floatident
+    %
+    \ifx\thiscaption\empty \else
+      \ifx\floatident\empty \else
+       \appendtomacro\captionline{: }% had ident, so need a colon between
+      \fi
+      %
+      % caption text.
+      \appendtomacro\captionline{\scanexp\thiscaption}%
+    \fi
+    %
+    % If we have anything to print, print it, with space before.
+    % Eventually this needs to become an \insert.
+    \ifx\captionline\empty \else
+      \vskip.5\parskip
+      \captionline
+      %
+      % Space below caption.
+      \vskip\parskip
+    \fi
+    %
+    % If have an xref label, write the list of floats info.  Do this
+    % after the caption, to avoid chance of it being a breakpoint.
+    \ifx\floatlabel\empty \else
+      % Write the text that goes in the lof to the aux file as
+      % \floatlabel-lof.  Besides \floatident, we include the short
+      % caption if specified, else the full caption if specified, else nothing.
+      {%
+        \atdummies
+        %
+        % since we read the caption text in the macro world, where ^^M
+        % is turned into a normal character, we have to scan it back, so
+        % we don't write the literal three characters "^^M" into the aux file.
+       \scanexp{%
+         \xdef\noexpand\gtemp{%
+           \ifx\thisshortcaption\empty
+             \thiscaption
+           \else
+             \thisshortcaption
+           \fi
+         }%
+       }%
+        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+         \ifx\gtemp\empty \else : \gtemp \fi}}%
+      }%
+    \fi
+  \egroup  % end of \vtop
+  %
+  % place the captured inserts
+  %
+  % BEWARE: when the floats start floating, we have to issue warning
+  % whenever an insert appears inside a float which could possibly
+  % float. --kasal, 26may04
+  %
+  \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+  \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use.  Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+  \ifx#1\relax
+      % Haven't seen this figure type before.
+      \csname newcount\endcsname #1%
+      %
+      % Remember to reset this floatno at the next chap.
+      \expandafter\gdef\expandafter\resetallfloatnos
+        \expandafter{\resetallfloatnos #1=0 }%
+  \fi
+  \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref.  That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
+% (safe) float type for this float.  We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+  \def\temp{#1}%
+  \def\iffloattype{#2}%
+  \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+  \def\floattype{#1}% floattype
+  {%
+    % the floattype might have accents or other special characters,
+    % but we need to use it in a control sequence name.
+    \indexnofonts
+    \turnoffactive
+    \xdef\safefloattype{\floattype}%
+  }%
+  %
+  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+    \ifhavexrefs
+      % if the user said @listoffloats foo but never @float foo.
+      \message{\linenumber No `\safefloattype' floats to list.}%
+    \fi
+  \else
+    \begingroup
+      \leftskip=\tocindent  % indent these entries like a toc
+      \let\do=\listoffloatsdo
+      \csname floatlist\safefloattype\endcsname
+    \endgroup
+  \fi
+}
+
+% This is called on each entry in a list of floats.  We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file.  We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+  % Can't fully expand XR#1-lof because it can contain anything.  Just
+  % pass the control sequence.  On the other hand, XR#1-pg is just the
+  % page number, and we want to fully expand that so we can get a link
+  % in pdf output.
+  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+  %
+  % use the same \entry macro we use to generate the TOC and index.
+  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+  \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding.  Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+  \catcode`\_ = \active
+  \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+  \let_=\normalunderscore  % normal _ character for filenames
+  \tex % read txi-??.tex file in plain TeX.
+    % Read the file by the name they passed if it exists.
+    \openin 1 txi-#1.tex
+    \ifeof 1
+      \documentlanguagetrywithoutunderscore{#1_\finish}%
+    \else
+      \globaldefs = 1  % everything in the txi-LL files needs to persist
+      \input txi-#1.tex
+    \fi
+    \closein 1
+  \endgroup % end raw TeX
+\endgroup}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+  \openin 1 txi-#1.tex
+  \ifeof 1
+    \errhelp = \nolanghelp
+    \errmessage{Cannot read language file txi-#1.tex}%
+  \else
+    \globaldefs = 1  % everything in the txi-LL files needs to persist
+    \input txi-#1.tex
+  \fi
+  \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty.  Maybe you need to install it?  Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages.  This means we can support hyphenation in
+% Texinfo, at least to some extent.  (This still doesn't solve the
+% accented characters problem.)
+%
+\catcode`@=11
+\def\txisetlanguage#1#2#3{%
+  % do not set the language if the name is undefined in the current TeX.
+  \expandafter\ifx\csname lang@#1\endcsname \relax
+    \message{no patterns for #1}%
+  \else
+    \global\language = \csname lang@#1\endcsname
+  \fi
+  % but there is no harm in adjusting the hyphenmin values regardless.
+  \global\lefthyphenmin = #2\relax
+  \global\righthyphenmin = #3\relax
+}
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+   \count255=128
+   \loop\ifnum\count255<256
+      \global\catcode\count255=#1\relax
+      \advance\count255 by 1
+   \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+   \count255=128
+   \loop\ifnum\count255<256
+      \catcode\count255=#1\relax
+      \advance\count255 by 1
+   \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\parseargdef\documentencoding{%
+  % Encoding being declared for the document.
+  \def\declaredencoding{\csname #1.enc\endcsname}%
+  %
+  % Supported encodings: names converted to tokens in order to be able
+  % to compare them with \ifx.
+  \def\ascii{\csname US-ASCII.enc\endcsname}%
+  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+  \def\latone{\csname ISO-8859-1.enc\endcsname}%
+  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+  \def\utfeight{\csname UTF-8.enc\endcsname}%
+  %
+  \ifx \declaredencoding \ascii
+     \asciichardefs
+  %
+  \else \ifx \declaredencoding \lattwo
+     \setnonasciicharscatcode\active
+     \lattwochardefs
+  %
+  \else \ifx \declaredencoding \latone
+     \setnonasciicharscatcode\active
+     \latonechardefs
+  %
+  \else \ifx \declaredencoding \latnine
+     \setnonasciicharscatcode\active
+     \latninechardefs
+  %
+  \else \ifx \declaredencoding \utfeight
+     \setnonasciicharscatcode\active
+     \utfeightchardefs
+  %
+  \else
+    \message{Unknown document encoding #1, ignoring.}%
+  %
+  \fi % utfeight
+  \fi % latnine
+  \fi % latone
+  \fi % lattwo
+  \fi % ascii
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+  \gdef^^a0{~}
+  \gdef^^a1{\exclamdown}
+  \gdef^^a2{\missingcharmsg{CENT SIGN}}
+  \gdef^^a3{{\pounds}}
+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdef^^a5{\missingcharmsg{YEN SIGN}}
+  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
+  \gdef^^a7{\S}
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\copyright}
+  \gdef^^aa{\ordf}
+  \gdef^^ab{\guillemetleft}
+  \gdef^^ac{$\lnot$}
+  \gdef^^ad{\-}
+  \gdef^^ae{\registeredsymbol}
+  \gdef^^af{\={}}
+  %
+  \gdef^^b0{\textdegree}
+  \gdef^^b1{$\pm$}
+  \gdef^^b2{$^2$}
+  \gdef^^b3{$^3$}
+  \gdef^^b4{\'{}}
+  \gdef^^b5{$\mu$}
+  \gdef^^b6{\P}
+  %
+  \gdef^^b7{$^.$}
+  \gdef^^b8{\cedilla\ }
+  \gdef^^b9{$^1$}
+  \gdef^^ba{\ordm}
+  %
+  \gdef^^bb{\guilletright}
+  \gdef^^bc{$1\over4$}
+  \gdef^^bd{$1\over2$}
+  \gdef^^be{$3\over4$}
+  \gdef^^bf{\questiondown}
+  %
+  \gdef^^c0{\`A}
+  \gdef^^c1{\'A}
+  \gdef^^c2{\^A}
+  \gdef^^c3{\~A}
+  \gdef^^c4{\"A}
+  \gdef^^c5{\ringaccent A}
+  \gdef^^c6{\AE}
+  \gdef^^c7{\cedilla C}
+  \gdef^^c8{\`E}
+  \gdef^^c9{\'E}
+  \gdef^^ca{\^E}
+  \gdef^^cb{\"E}
+  \gdef^^cc{\`I}
+  \gdef^^cd{\'I}
+  \gdef^^ce{\^I}
+  \gdef^^cf{\"I}
+  %
+  \gdef^^d0{\DH}
+  \gdef^^d1{\~N}
+  \gdef^^d2{\`O}
+  \gdef^^d3{\'O}
+  \gdef^^d4{\^O}
+  \gdef^^d5{\~O}
+  \gdef^^d6{\"O}
+  \gdef^^d7{$\times$}
+  \gdef^^d8{\O}
+  \gdef^^d9{\`U}
+  \gdef^^da{\'U}
+  \gdef^^db{\^U}
+  \gdef^^dc{\"U}
+  \gdef^^dd{\'Y}
+  \gdef^^de{\TH}
+  \gdef^^df{\ss}
+  %
+  \gdef^^e0{\`a}
+  \gdef^^e1{\'a}
+  \gdef^^e2{\^a}
+  \gdef^^e3{\~a}
+  \gdef^^e4{\"a}
+  \gdef^^e5{\ringaccent a}
+  \gdef^^e6{\ae}
+  \gdef^^e7{\cedilla c}
+  \gdef^^e8{\`e}
+  \gdef^^e9{\'e}
+  \gdef^^ea{\^e}
+  \gdef^^eb{\"e}
+  \gdef^^ec{\`{\dotless i}}
+  \gdef^^ed{\'{\dotless i}}
+  \gdef^^ee{\^{\dotless i}}
+  \gdef^^ef{\"{\dotless i}}
+  %
+  \gdef^^f0{\dh}
+  \gdef^^f1{\~n}
+  \gdef^^f2{\`o}
+  \gdef^^f3{\'o}
+  \gdef^^f4{\^o}
+  \gdef^^f5{\~o}
+  \gdef^^f6{\"o}
+  \gdef^^f7{$\div$}
+  \gdef^^f8{\o}
+  \gdef^^f9{\`u}
+  \gdef^^fa{\'u}
+  \gdef^^fb{\^u}
+  \gdef^^fc{\"u}
+  \gdef^^fd{\'y}
+  \gdef^^fe{\th}
+  \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+  % Encoding is almost identical to Latin1.
+  \latonechardefs
+  %
+  \gdef^^a4{\euro}
+  \gdef^^a6{\v S}
+  \gdef^^a8{\v s}
+  \gdef^^b4{\v Z}
+  \gdef^^b8{\v z}
+  \gdef^^bc{\OE}
+  \gdef^^bd{\oe}
+  \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+  \gdef^^a0{~}
+  \gdef^^a1{\ogonek{A}}
+  \gdef^^a2{\u{}}
+  \gdef^^a3{\L}
+  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+  \gdef^^a5{\v L}
+  \gdef^^a6{\'S}
+  \gdef^^a7{\S}
+  \gdef^^a8{\"{}}
+  \gdef^^a9{\v S}
+  \gdef^^aa{\cedilla S}
+  \gdef^^ab{\v T}
+  \gdef^^ac{\'Z}
+  \gdef^^ad{\-}
+  \gdef^^ae{\v Z}
+  \gdef^^af{\dotaccent Z}
+  %
+  \gdef^^b0{\textdegree}
+  \gdef^^b1{\ogonek{a}}
+  \gdef^^b2{\ogonek{ }}
+  \gdef^^b3{\l}
+  \gdef^^b4{\'{}}
+  \gdef^^b5{\v l}
+  \gdef^^b6{\'s}
+  \gdef^^b7{\v{}}
+  \gdef^^b8{\cedilla\ }
+  \gdef^^b9{\v s}
+  \gdef^^ba{\cedilla s}
+  \gdef^^bb{\v t}
+  \gdef^^bc{\'z}
+  \gdef^^bd{\H{}}
+  \gdef^^be{\v z}
+  \gdef^^bf{\dotaccent z}
+  %
+  \gdef^^c0{\'R}
+  \gdef^^c1{\'A}
+  \gdef^^c2{\^A}
+  \gdef^^c3{\u A}
+  \gdef^^c4{\"A}
+  \gdef^^c5{\'L}
+  \gdef^^c6{\'C}
+  \gdef^^c7{\cedilla C}
+  \gdef^^c8{\v C}
+  \gdef^^c9{\'E}
+  \gdef^^ca{\ogonek{E}}
+  \gdef^^cb{\"E}
+  \gdef^^cc{\v E}
+  \gdef^^cd{\'I}
+  \gdef^^ce{\^I}
+  \gdef^^cf{\v D}
+  %
+  \gdef^^d0{\DH}
+  \gdef^^d1{\'N}
+  \gdef^^d2{\v N}
+  \gdef^^d3{\'O}
+  \gdef^^d4{\^O}
+  \gdef^^d5{\H O}
+  \gdef^^d6{\"O}
+  \gdef^^d7{$\times$}
+  \gdef^^d8{\v R}
+  \gdef^^d9{\ringaccent U}
+  \gdef^^da{\'U}
+  \gdef^^db{\H U}
+  \gdef^^dc{\"U}
+  \gdef^^dd{\'Y}
+  \gdef^^de{\cedilla T}
+  \gdef^^df{\ss}
+  %
+  \gdef^^e0{\'r}
+  \gdef^^e1{\'a}
+  \gdef^^e2{\^a}
+  \gdef^^e3{\u a}
+  \gdef^^e4{\"a}
+  \gdef^^e5{\'l}
+  \gdef^^e6{\'c}
+  \gdef^^e7{\cedilla c}
+  \gdef^^e8{\v c}
+  \gdef^^e9{\'e}
+  \gdef^^ea{\ogonek{e}}
+  \gdef^^eb{\"e}
+  \gdef^^ec{\v e}
+  \gdef^^ed{\'\i}
+  \gdef^^ee{\^\i}
+  \gdef^^ef{\v d}
+  %
+  \gdef^^f0{\dh}
+  \gdef^^f1{\'n}
+  \gdef^^f2{\v n}
+  \gdef^^f3{\'o}
+  \gdef^^f4{\^o}
+  \gdef^^f5{\H o}
+  \gdef^^f6{\"o}
+  \gdef^^f7{$\div$}
+  \gdef^^f8{\v r}
+  \gdef^^f9{\ringaccent u}
+  \gdef^^fa{\'u}
+  \gdef^^fb{\H u}
+  \gdef^^fc{\"u}
+  \gdef^^fd{\'y}
+  \gdef^^fe{\cedilla t}
+  \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions.  It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+  \ifx #1\relax
+    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+  \else
+    \expandafter #1%
+  \fi
+}
+
+\begingroup
+  \catcode`\~13
+  \catcode`\"12
+
+  \def\UTFviiiLoop{%
+    \global\catcode\countUTFx\active
+    \uccode`\~\countUTFx
+    \uppercase\expandafter{\UTFviiiTmp}%
+    \advance\countUTFx by 1
+    \ifnum\countUTFx < \countUTFy
+      \expandafter\UTFviiiLoop
+    \fi}
+
+  \countUTFx = "C2
+  \countUTFy = "E0
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+  \UTFviiiLoop
+
+  \countUTFx = "E0
+  \countUTFy = "F0
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+  \UTFviiiLoop
+
+  \countUTFx = "F0
+  \countUTFy = "F4
+  \def\UTFviiiTmp{%
+    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+  \UTFviiiLoop
+\endgroup
+
+\begingroup
+  \catcode`\"=12
+  \catcode`\<=12
+  \catcode`\.=12
+  \catcode`\,=12
+  \catcode`\;=12
+  \catcode`\!=12
+  \catcode`\~=13
+
+  \gdef\DeclareUnicodeCharacter#1#2{%
+    \countUTFz = "#1\relax
+    \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+    \begingroup
+      \parseXMLCharref
+      \def\UTFviiiTwoOctets##1##2{%
+        \csname u8:##1\string ##2\endcsname}%
+      \def\UTFviiiThreeOctets##1##2##3{%
+        \csname u8:##1\string ##2\string ##3\endcsname}%
+      \def\UTFviiiFourOctets##1##2##3##4{%
+        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+      \expandafter\expandafter\expandafter\expandafter
+       \expandafter\expandafter\expandafter
+       \gdef\UTFviiiTmp{#2}%
+    \endgroup}
+
+  \gdef\parseXMLCharref{%
+    \ifnum\countUTFz < "A0\relax
+      \errhelp = \EMsimple
+      \errmessage{Cannot define Unicode char value < 00A0}%
+    \else\ifnum\countUTFz < "800\relax
+      \parseUTFviiiA,%
+      \parseUTFviiiB C\UTFviiiTwoOctets.,%
+    \else\ifnum\countUTFz < "10000\relax
+      \parseUTFviiiA;%
+      \parseUTFviiiA,%
+      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+    \else
+      \parseUTFviiiA;%
+      \parseUTFviiiA,%
+      \parseUTFviiiA!%
+      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+    \fi\fi\fi
+  }
+
+  \gdef\parseUTFviiiA#1{%
+    \countUTFx = \countUTFz
+    \divide\countUTFz by 64
+    \countUTFy = \countUTFz
+    \multiply\countUTFz by 64
+    \advance\countUTFx by -\countUTFz
+    \advance\countUTFx by 128
+    \uccode `#1\countUTFx
+    \countUTFz = \countUTFy}
+
+  \gdef\parseUTFviiiB#1#2#3#4{%
+    \advance\countUTFz by "#10\relax
+    \uccode `#3\countUTFz
+    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+\def\utfeightchardefs{%
+  \DeclareUnicodeCharacter{00A0}{\tie}
+  \DeclareUnicodeCharacter{00A1}{\exclamdown}
+  \DeclareUnicodeCharacter{00A3}{\pounds}
+  \DeclareUnicodeCharacter{00A8}{\"{ }}
+  \DeclareUnicodeCharacter{00A9}{\copyright}
+  \DeclareUnicodeCharacter{00AA}{\ordf}
+  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+  \DeclareUnicodeCharacter{00AD}{\-}
+  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+  \DeclareUnicodeCharacter{00AF}{\={ }}
+
+  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+  \DeclareUnicodeCharacter{00B4}{\'{ }}
+  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+  \DeclareUnicodeCharacter{00BA}{\ordm}
+  \DeclareUnicodeCharacter{00BB}{\guillemetright}
+  \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+  \DeclareUnicodeCharacter{00C0}{\`A}
+  \DeclareUnicodeCharacter{00C1}{\'A}
+  \DeclareUnicodeCharacter{00C2}{\^A}
+  \DeclareUnicodeCharacter{00C3}{\~A}
+  \DeclareUnicodeCharacter{00C4}{\"A}
+  \DeclareUnicodeCharacter{00C5}{\AA}
+  \DeclareUnicodeCharacter{00C6}{\AE}
+  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+  \DeclareUnicodeCharacter{00C8}{\`E}
+  \DeclareUnicodeCharacter{00C9}{\'E}
+  \DeclareUnicodeCharacter{00CA}{\^E}
+  \DeclareUnicodeCharacter{00CB}{\"E}
+  \DeclareUnicodeCharacter{00CC}{\`I}
+  \DeclareUnicodeCharacter{00CD}{\'I}
+  \DeclareUnicodeCharacter{00CE}{\^I}
+  \DeclareUnicodeCharacter{00CF}{\"I}
+
+  \DeclareUnicodeCharacter{00D0}{\DH}
+  \DeclareUnicodeCharacter{00D1}{\~N}
+  \DeclareUnicodeCharacter{00D2}{\`O}
+  \DeclareUnicodeCharacter{00D3}{\'O}
+  \DeclareUnicodeCharacter{00D4}{\^O}
+  \DeclareUnicodeCharacter{00D5}{\~O}
+  \DeclareUnicodeCharacter{00D6}{\"O}
+  \DeclareUnicodeCharacter{00D8}{\O}
+  \DeclareUnicodeCharacter{00D9}{\`U}
+  \DeclareUnicodeCharacter{00DA}{\'U}
+  \DeclareUnicodeCharacter{00DB}{\^U}
+  \DeclareUnicodeCharacter{00DC}{\"U}
+  \DeclareUnicodeCharacter{00DD}{\'Y}
+  \DeclareUnicodeCharacter{00DE}{\TH}
+  \DeclareUnicodeCharacter{00DF}{\ss}
+
+  \DeclareUnicodeCharacter{00E0}{\`a}
+  \DeclareUnicodeCharacter{00E1}{\'a}
+  \DeclareUnicodeCharacter{00E2}{\^a}
+  \DeclareUnicodeCharacter{00E3}{\~a}
+  \DeclareUnicodeCharacter{00E4}{\"a}
+  \DeclareUnicodeCharacter{00E5}{\aa}
+  \DeclareUnicodeCharacter{00E6}{\ae}
+  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+  \DeclareUnicodeCharacter{00E8}{\`e}
+  \DeclareUnicodeCharacter{00E9}{\'e}
+  \DeclareUnicodeCharacter{00EA}{\^e}
+  \DeclareUnicodeCharacter{00EB}{\"e}
+  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+  \DeclareUnicodeCharacter{00F0}{\dh}
+  \DeclareUnicodeCharacter{00F1}{\~n}
+  \DeclareUnicodeCharacter{00F2}{\`o}
+  \DeclareUnicodeCharacter{00F3}{\'o}
+  \DeclareUnicodeCharacter{00F4}{\^o}
+  \DeclareUnicodeCharacter{00F5}{\~o}
+  \DeclareUnicodeCharacter{00F6}{\"o}
+  \DeclareUnicodeCharacter{00F8}{\o}
+  \DeclareUnicodeCharacter{00F9}{\`u}
+  \DeclareUnicodeCharacter{00FA}{\'u}
+  \DeclareUnicodeCharacter{00FB}{\^u}
+  \DeclareUnicodeCharacter{00FC}{\"u}
+  \DeclareUnicodeCharacter{00FD}{\'y}
+  \DeclareUnicodeCharacter{00FE}{\th}
+  \DeclareUnicodeCharacter{00FF}{\"y}
+
+  \DeclareUnicodeCharacter{0100}{\=A}
+  \DeclareUnicodeCharacter{0101}{\=a}
+  \DeclareUnicodeCharacter{0102}{\u{A}}
+  \DeclareUnicodeCharacter{0103}{\u{a}}
+  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+  \DeclareUnicodeCharacter{0106}{\'C}
+  \DeclareUnicodeCharacter{0107}{\'c}
+  \DeclareUnicodeCharacter{0108}{\^C}
+  \DeclareUnicodeCharacter{0109}{\^c}
+  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+  \DeclareUnicodeCharacter{010C}{\v{C}}
+  \DeclareUnicodeCharacter{010D}{\v{c}}
+  \DeclareUnicodeCharacter{010E}{\v{D}}
+
+  \DeclareUnicodeCharacter{0112}{\=E}
+  \DeclareUnicodeCharacter{0113}{\=e}
+  \DeclareUnicodeCharacter{0114}{\u{E}}
+  \DeclareUnicodeCharacter{0115}{\u{e}}
+  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+  \DeclareUnicodeCharacter{011A}{\v{E}}
+  \DeclareUnicodeCharacter{011B}{\v{e}}
+  \DeclareUnicodeCharacter{011C}{\^G}
+  \DeclareUnicodeCharacter{011D}{\^g}
+  \DeclareUnicodeCharacter{011E}{\u{G}}
+  \DeclareUnicodeCharacter{011F}{\u{g}}
+
+  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+  \DeclareUnicodeCharacter{0124}{\^H}
+  \DeclareUnicodeCharacter{0125}{\^h}
+  \DeclareUnicodeCharacter{0128}{\~I}
+  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+  \DeclareUnicodeCharacter{012A}{\=I}
+  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+  \DeclareUnicodeCharacter{012C}{\u{I}}
+  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+
+  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+  \DeclareUnicodeCharacter{0131}{\dotless{i}}
+  \DeclareUnicodeCharacter{0132}{IJ}
+  \DeclareUnicodeCharacter{0133}{ij}
+  \DeclareUnicodeCharacter{0134}{\^J}
+  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+  \DeclareUnicodeCharacter{0139}{\'L}
+  \DeclareUnicodeCharacter{013A}{\'l}
+
+  \DeclareUnicodeCharacter{0141}{\L}
+  \DeclareUnicodeCharacter{0142}{\l}
+  \DeclareUnicodeCharacter{0143}{\'N}
+  \DeclareUnicodeCharacter{0144}{\'n}
+  \DeclareUnicodeCharacter{0147}{\v{N}}
+  \DeclareUnicodeCharacter{0148}{\v{n}}
+  \DeclareUnicodeCharacter{014C}{\=O}
+  \DeclareUnicodeCharacter{014D}{\=o}
+  \DeclareUnicodeCharacter{014E}{\u{O}}
+  \DeclareUnicodeCharacter{014F}{\u{o}}
+
+  \DeclareUnicodeCharacter{0150}{\H{O}}
+  \DeclareUnicodeCharacter{0151}{\H{o}}
+  \DeclareUnicodeCharacter{0152}{\OE}
+  \DeclareUnicodeCharacter{0153}{\oe}
+  \DeclareUnicodeCharacter{0154}{\'R}
+  \DeclareUnicodeCharacter{0155}{\'r}
+  \DeclareUnicodeCharacter{0158}{\v{R}}
+  \DeclareUnicodeCharacter{0159}{\v{r}}
+  \DeclareUnicodeCharacter{015A}{\'S}
+  \DeclareUnicodeCharacter{015B}{\'s}
+  \DeclareUnicodeCharacter{015C}{\^S}
+  \DeclareUnicodeCharacter{015D}{\^s}
+  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+  \DeclareUnicodeCharacter{0160}{\v{S}}
+  \DeclareUnicodeCharacter{0161}{\v{s}}
+  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
+  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+  \DeclareUnicodeCharacter{0164}{\v{T}}
+
+  \DeclareUnicodeCharacter{0168}{\~U}
+  \DeclareUnicodeCharacter{0169}{\~u}
+  \DeclareUnicodeCharacter{016A}{\=U}
+  \DeclareUnicodeCharacter{016B}{\=u}
+  \DeclareUnicodeCharacter{016C}{\u{U}}
+  \DeclareUnicodeCharacter{016D}{\u{u}}
+  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+  \DeclareUnicodeCharacter{0170}{\H{U}}
+  \DeclareUnicodeCharacter{0171}{\H{u}}
+  \DeclareUnicodeCharacter{0174}{\^W}
+  \DeclareUnicodeCharacter{0175}{\^w}
+  \DeclareUnicodeCharacter{0176}{\^Y}
+  \DeclareUnicodeCharacter{0177}{\^y}
+  \DeclareUnicodeCharacter{0178}{\"Y}
+  \DeclareUnicodeCharacter{0179}{\'Z}
+  \DeclareUnicodeCharacter{017A}{\'z}
+  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+  \DeclareUnicodeCharacter{017D}{\v{Z}}
+  \DeclareUnicodeCharacter{017E}{\v{z}}
+
+  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+  \DeclareUnicodeCharacter{01C5}{D\v{z}}
+  \DeclareUnicodeCharacter{01C6}{d\v{z}}
+  \DeclareUnicodeCharacter{01C7}{LJ}
+  \DeclareUnicodeCharacter{01C8}{Lj}
+  \DeclareUnicodeCharacter{01C9}{lj}
+  \DeclareUnicodeCharacter{01CA}{NJ}
+  \DeclareUnicodeCharacter{01CB}{Nj}
+  \DeclareUnicodeCharacter{01CC}{nj}
+  \DeclareUnicodeCharacter{01CD}{\v{A}}
+  \DeclareUnicodeCharacter{01CE}{\v{a}}
+  \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+  \DeclareUnicodeCharacter{01D1}{\v{O}}
+  \DeclareUnicodeCharacter{01D2}{\v{o}}
+  \DeclareUnicodeCharacter{01D3}{\v{U}}
+  \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+  \DeclareUnicodeCharacter{01E2}{\={\AE}}
+  \DeclareUnicodeCharacter{01E3}{\={\ae}}
+  \DeclareUnicodeCharacter{01E6}{\v{G}}
+  \DeclareUnicodeCharacter{01E7}{\v{g}}
+  \DeclareUnicodeCharacter{01E8}{\v{K}}
+  \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+  \DeclareUnicodeCharacter{01F1}{DZ}
+  \DeclareUnicodeCharacter{01F2}{Dz}
+  \DeclareUnicodeCharacter{01F3}{dz}
+  \DeclareUnicodeCharacter{01F4}{\'G}
+  \DeclareUnicodeCharacter{01F5}{\'g}
+  \DeclareUnicodeCharacter{01F8}{\`N}
+  \DeclareUnicodeCharacter{01F9}{\`n}
+  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+  \DeclareUnicodeCharacter{01FE}{\'{\O}}
+  \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+  \DeclareUnicodeCharacter{021E}{\v{H}}
+  \DeclareUnicodeCharacter{021F}{\v{h}}
+
+  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+  \DeclareUnicodeCharacter{0232}{\=Y}
+  \DeclareUnicodeCharacter{0233}{\=y}
+  \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+  \DeclareUnicodeCharacter{1E20}{\=G}
+  \DeclareUnicodeCharacter{1E21}{\=g}
+  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+  \DeclareUnicodeCharacter{1E26}{\"H}
+  \DeclareUnicodeCharacter{1E27}{\"h}
+
+  \DeclareUnicodeCharacter{1E30}{\'K}
+  \DeclareUnicodeCharacter{1E31}{\'k}
+  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+  \DeclareUnicodeCharacter{1E3E}{\'M}
+  \DeclareUnicodeCharacter{1E3F}{\'m}
+
+  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+  \DeclareUnicodeCharacter{1E54}{\'P}
+  \DeclareUnicodeCharacter{1E55}{\'p}
+  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+  \DeclareUnicodeCharacter{1E7C}{\~V}
+  \DeclareUnicodeCharacter{1E7D}{\~v}
+  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+  \DeclareUnicodeCharacter{1E80}{\`W}
+  \DeclareUnicodeCharacter{1E81}{\`w}
+  \DeclareUnicodeCharacter{1E82}{\'W}
+  \DeclareUnicodeCharacter{1E83}{\'w}
+  \DeclareUnicodeCharacter{1E84}{\"W}
+  \DeclareUnicodeCharacter{1E85}{\"w}
+  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+  \DeclareUnicodeCharacter{1E8C}{\"X}
+  \DeclareUnicodeCharacter{1E8D}{\"x}
+  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+  \DeclareUnicodeCharacter{1E90}{\^Z}
+  \DeclareUnicodeCharacter{1E91}{\^z}
+  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+  \DeclareUnicodeCharacter{1E97}{\"t}
+  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+  \DeclareUnicodeCharacter{1EBC}{\~E}
+  \DeclareUnicodeCharacter{1EBD}{\~e}
+
+  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+  \DeclareUnicodeCharacter{1EF2}{\`Y}
+  \DeclareUnicodeCharacter{1EF3}{\`y}
+  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+  \DeclareUnicodeCharacter{1EF8}{\~Y}
+  \DeclareUnicodeCharacter{1EF9}{\~y}
+
+  \DeclareUnicodeCharacter{2013}{--}
+  \DeclareUnicodeCharacter{2014}{---}
+  \DeclareUnicodeCharacter{2018}{\quoteleft}
+  \DeclareUnicodeCharacter{2019}{\quoteright}
+  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+  \DeclareUnicodeCharacter{201C}{\quotedblleft}
+  \DeclareUnicodeCharacter{201D}{\quotedblright}
+  \DeclareUnicodeCharacter{201E}{\quotedblbase}
+  \DeclareUnicodeCharacter{2022}{\bullet}
+  \DeclareUnicodeCharacter{2026}{\dots}
+  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+  \DeclareUnicodeCharacter{203A}{\guilsinglright}
+  \DeclareUnicodeCharacter{20AC}{\euro}
+
+  \DeclareUnicodeCharacter{2192}{\expansion}
+  \DeclareUnicodeCharacter{21D2}{\result}
+
+  \DeclareUnicodeCharacter{2212}{\minus}
+  \DeclareUnicodeCharacter{2217}{\point}
+  \DeclareUnicodeCharacter{2261}{\equiv}
+}% end of \utfeightchardefs
+
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+   \relax
+}
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything.  We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize.  We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+  \ifx\emergencystretch\thisisundefined
+    % Allow us to assign to \emergencystretch anyway.
+    \def\emergencystretch{\dimen0}%
+  \else
+    \emergencystretch = .15\hsize
+  \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading.  The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+  \voffset = #3\relax
+  \topskip = #6\relax
+  \splittopskip = \topskip
+  %
+  \vsize = #1\relax
+  \advance\vsize by \topskip
+  \outervsize = \vsize
+  \advance\outervsize by 2\topandbottommargin
+  \pageheight = \vsize
+  %
+  \hsize = #2\relax
+  \outerhsize = \hsize
+  \advance\outerhsize by 0.5in
+  \pagewidth = \hsize
+  %
+  \normaloffset = #4\relax
+  \bindingoffset = #5\relax
+  %
+  \ifpdf
+    \pdfpageheight #7\relax
+    \pdfpagewidth #8\relax
+    % if we don't reset these, they will remain at "1 true in" of
+    % whatever layout pdftex was dumped with.
+    \pdfhorigin = 1 true in
+    \pdfvorigin = 1 true in
+  \fi
+  %
+  \setleading{\textleading}
+  %
+  \parindent = \defaultparindent
+  \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % If page is nothing but text, make it come out even.
+  \internalpagesizes{607.2pt}{6in}% that's 46 lines
+                    {\voffset}{.25in}%
+                    {\bindingoffset}{36pt}%
+                    {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+  \parskip = 2pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.5in}{5in}%
+                    {-.2in}{0in}%
+                    {\bindingoffset}{16pt}%
+                    {9.25in}{7in}%
+  %
+  \lispnarrowing = 0.3in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+  \parskip = 1.5pt plus 1pt
+  \textleading = 12pt
+  %
+  \internalpagesizes{7.4in}{4.8in}%
+                    {-.2in}{-.4in}%
+                    {0pt}{14pt}%
+                    {9in}{6in}%
+  %
+  \lispnarrowing = 0.25in
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+  \parskip = 3pt plus 2pt minus 1pt
+  \textleading = 13.2pt
+  %
+  % Double-side printing via postscript on Laserjet 4050
+  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+  % To change the settings for a different printer or situation, adjust
+  % \normaloffset until the front-side and back-side texts align.  Then
+  % do the same for \bindingoffset.  You can set these for testing in
+  % your texinfo source file like this:
+  % @tex
+  % \global\normaloffset = -6mm
+  % \global\bindingoffset = 10mm
+  % @end tex
+  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{44pt}%
+                    {297mm}{210mm}%
+  %
+  \tolerance = 700
+  \hfuzz = 1pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+  \parskip = 2pt plus 1pt minus 0.1pt
+  \textleading = 12.5pt
+  %
+  \internalpagesizes{160mm}{120mm}%
+                    {\voffset}{\hoffset}%
+                    {\bindingoffset}{8pt}%
+                    {210mm}{148mm}%
+  %
+  \lispnarrowing = 0.2in
+  \tolerance = 800
+  \hfuzz = 1.2pt
+  \contentsrightmargin = 0pt
+  \defbodyindent = 2mm
+  \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{237mm}{150mm}%
+                    {\voffset}{4.6mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  %
+  % Must explicitly reset to 0 because we call \afourpaper.
+  \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+  \afourpaper
+  \internalpagesizes{241mm}{165mm}%
+                    {\voffset}{-2.95mm}%
+                    {\bindingoffset}{7mm}%
+                    {297mm}{210mm}%
+  \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+  \globaldefs = 1
+  %
+  \parskip = 3pt plus 2pt minus 1pt
+  \setleading{\textleading}%
+  %
+  \dimen0 = #1\relax
+  \advance\dimen0 by \voffset
+  %
+  \dimen2 = \hsize
+  \advance\dimen2 by \normaloffset
+  %
+  \internalpagesizes{#1}{\hsize}%
+                    {\voffset}{\normaloffset}%
+                    {\bindingoffset}{44pt}%
+                    {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise.  Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font.  Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts.  But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+  \normalturnoffactive
+  \otherbackslash
+}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active
+@def@normalbackslash{{@tt@backslashcurfont}}
+% On startup, @fixbackslash assigns:
+%  @let \ = @normalbackslash
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+@gdef@rawbackslash{@let\=@backslashcurfont}
+@gdef@otherbackslash{@let\=@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'.
+%
+@def@normalturnoffactive{%
+  @let\=@normalbackslash
+  @let"=@normaldoublequote
+  @let~=@normaltilde
+  @let^=@normalcaret
+  @let_=@normalunderscore
+  @let|=@normalverticalbar
+  @let<=@normalless
+  @let>=@normalgreater
+  @let+=@normalplus
+  @let$=@normaldollar %$ font-lock fix
+  @markupsetuplqdefault
+  @markupsetuprqdefault
+  @unsepspaces
+}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\' in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also turn back on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+  @ifx\@eatinput @let\ = @normalbackslash @fi
+  @catcode`+=@active
+  @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+@c Finally, make ` and ' active, so that txicodequoteundirected and
+@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
+@c don't make ` and ' active, @code will not get them as active chars.
+@c Do this last of all since we use ` in the previous @catcode assignments.
+@catcode`@'=@active
+@catcode`@`=@active
+@markupsetuplqdefault
+@markupsetuprqdefault
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
new file mode 100755 (executable)
index 0000000..28ff441
--- /dev/null
@@ -0,0 +1,266 @@
+eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" ${1+"$@"}'
+  & eval 'exec perl -wS -0777 -pi "$0" $argv:q'
+    if 0;
+# Update an FSF copyright year list to include the current year.
+
+my $VERSION = '2009-12-28.11:09'; # UTC
+
+# Copyright (C) 2009-2010 Free Software Foundation, Inc.
+#
+# 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, 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/>.
+
+# Written by Jim Meyering and Joel E. Denny
+
+# The arguments to this script should be names of files that contain FSF
+# copyright statements to be updated.  For example, you might wish to
+# use the update-copyright target rule in maint.mk from gnulib's
+# maintainer-makefile module.
+#
+# Iff an FSF copyright statement is recognized in a file and the final
+# year is not the current year, then the statement is updated for the
+# new year and it is reformatted to:
+#
+#   1. Fit within 72 columns.
+#   2. Convert 2-digit years to 4-digit years by prepending "19".
+#   3. Expand copyright year intervals.  (See "Environment variables"
+#      below.)
+#
+# A warning is printed for every file for which no FSF copyright
+# statement is recognized.
+#
+# Each file's FSF copyright statement must be formated correctly in
+# order to be recognized.  For example, each of these is fine:
+#
+#   Copyright @copyright{} 1990-2005, 2007-2009 Free Software
+#   Foundation, Inc.
+#
+#   # Copyright (C) 1990-2005, 2007-2009 Free Software
+#   # Foundation, Inc.
+#
+#   /*
+#    * Copyright &copy; 90,2005,2007-2009
+#    * Free Software Foundation, Inc.
+#    */
+#
+# However, the following format is not recognized because the line
+# prefix changes after the first line:
+#
+#   ## Copyright (C) 1990-2005, 2007-2009 Free Software
+#   #  Foundation, Inc.
+#
+# The following copyright statement is not recognized because the
+# copyright holder is not the FSF:
+#
+#   Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
+#
+# However, any correctly formatted FSF copyright statement following
+# either of the previous two copyright statements would be recognized.
+#
+# The exact conditions that a file's FSF copyright statement must meet
+# to be recognized are:
+#
+#   1. It is the first FSF copyright statement that meets all of the
+#      following conditions.  Subsequent FSF copyright statements are
+#      ignored.
+#   2. Its format is "Copyright (C)", then a list of copyright years,
+#      and then the name of the copyright holder, which is "Free
+#      Software Foundation, Inc.".
+#   3. The "(C)" takes one of the following forms or is omitted
+#      entirely:
+#
+#        A. (C)
+#        B. (c)
+#        C. @copyright{}
+#        D. &copy;
+#
+#   4. The "Copyright" appears at the beginning of a line except that it
+#      may be prefixed by any sequence (e.g., a comment) of no more than
+#      5 characters.
+#   5. Iff such a prefix is present, the same prefix appears at the
+#      beginning of each remaining line within the FSF copyright
+#      statement.  There is one exception in order to support C-style
+#      comments: if the first line's prefix contains nothing but
+#      whitespace surrounding a "/*", then the prefix for all subsequent
+#      lines is the same as the first line's prefix except with each of
+#      "/" and possibly "*" replaced by a " ".  The replacement of "*"
+#      by " " is consistent throughout all subsequent lines.
+#   6. Blank lines, even if preceded by the prefix, do not appear
+#      within the FSF copyright statement.
+#   7. Each copyright year is 2 or 4 digits, and years are separated by
+#      commas or dashes.  Whitespace may appear after commas.
+#
+# Environment variables:
+#
+#   1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
+#      is reformatted even if it does not need updating for the new
+#      year.  If unset or set to 0, only updated FSF copyright
+#      statements are reformatted.
+#   2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
+#      copyright years (such as 90, 1991, 1992-2007, 2008) in a
+#      reformatted FSF copyright statement is collapsed to a single
+#      interval (such as 1990-2008).  If unset or set to 0, all existing
+#      copyright year intervals in a reformatted FSF copyright statement
+#      are expanded instead.
+#   3. For testing purposes, you can set the assumed current year in
+#      UPDATE_COPYRIGHT_YEAR.
+#   4. The default maximum line length for a copyright line is 72.
+#      Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
+
+use strict;
+use warnings;
+
+my $copyright_re = 'Copyright';
+my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
+my $holder = 'Free Software Foundation, Inc.';
+my $prefix_max = 5;
+my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
+!$margin || $margin !~ m/^\d+$/
+  and $margin = 72;
+
+my $tab_width = 8;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+  {
+    my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+    $this_year = $year + 1900;
+  }
+
+# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
+my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
+
+my $leading;
+my $prefix;
+my $ws_re;
+my $stmt_re;
+while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
+  {
+    $leading = "$1$2";
+    $prefix = $2;
+    if ($prefix =~ /^(\s*\/)\*(\s*)$/)
+      {
+        $prefix =~ s,/, ,;
+        my $prefix_ws = $prefix;
+        $prefix_ws =~ s/\*/ /; # Only whitespace.
+        if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
+          {
+            $prefix = $prefix_ws;
+          }
+      }
+    $ws_re = '[ \t\r\f]'; # \s without \n
+    $ws_re =
+      "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
+    my $holder_re = $holder;
+    $holder_re =~ s/\s/$ws_re/g;
+    my $stmt_remainder_re =
+      "(?:$ws_re$circle_c_re)?"
+      . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
+      . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
+    if (/\G$stmt_remainder_re/)
+      {
+        $stmt_re =
+          quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
+        last;
+      }
+  }
+if (defined $stmt_re)
+  {
+    /$stmt_re/ or die; # Should never die.
+    my $stmt = $1;
+    my $final_year_orig = $2;
+
+    # Handle two-digit year numbers like "98" and "99".
+    my $final_year = $final_year_orig;
+    $final_year <= 99
+      and $final_year += 1900;
+
+    if ($final_year != $this_year)
+      {
+        # Update the year.
+        $stmt =~ s/$final_year_orig/$final_year, $this_year/;
+      }
+    if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
+      {
+        # Normalize all whitespace including newline-prefix sequences.
+        $stmt =~ s/$ws_re/ /g;
+
+        # Put spaces after commas.
+        $stmt =~ s/, ?/, /g;
+
+        # Convert 2-digit to 4-digit years.
+        $stmt =~ s/(\b\d\d\b)/19$1/g;
+
+        # Make the use of intervals consistent.
+        if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
+          {
+            $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
+          }
+        else
+          {
+            $stmt =~
+              s/
+                (\d{4})
+                (?:
+                  (,\ |-)
+                  ((??{
+                    if    ($2 eq '-') { '\d{4}'; }
+                    elsif (!$3)       { $1 + 1;  }
+                    else              { $3 + 1;  }
+                  }))
+                )+
+              /$1-$3/gx;
+          }
+
+        # Format within margin.
+        my $stmt_wrapped;
+        my $text_margin = $margin - length($prefix);
+        if ($prefix =~ /^(\t+)/)
+          {
+            $text_margin -= length($1) * ($tab_width - 1);
+          }
+        while (length $stmt)
+          {
+            if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
+                || ($stmt =~ s/^([\S]+)(?: |$)//))
+              {
+                my $line = $1;
+                $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
+                $stmt_wrapped .= $line;
+              }
+            else
+              {
+                # Should be unreachable, but we don't want an infinite
+                # loop if it can be reached.
+                die;
+              }
+          }
+
+        # Replace the old copyright statement.
+        s/$stmt_re/$stmt_wrapped/;
+      }
+  }
+else
+  {
+    print STDERR "$ARGV: warning: FSF copyright statement not found\n";
+  }
+
+# Local variables:
+# mode: perl
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free
new file mode 100755 (executable)
index 0000000..6aa7d39
--- /dev/null
@@ -0,0 +1,209 @@
+eval '(exit $?0)' && eval 'exec perl -wST "$0" ${1+"$@"}'
+  & eval 'exec perl -wST "$0" $argv:q'
+    if 0;
+# Detect instances of "if (p) free (p);".
+# Likewise for "if (p != NULL) free (p);".  And with braces.
+# Also detect "if (NULL != p) free (p);".
+# And with 0 in place of NULL.
+
+my $VERSION = '2009-04-16 15:57'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2010 Free Software Foundation, Inc.
+
+# 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/>.
+
+# Written by Jim Meyering
+
+use strict;
+use warnings;
+use Getopt::Long;
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try `$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] FILE...
+
+Detect any instance in FILE of a useless "if" test before a free call, e.g.,
+"if (p) free (p);".  Any such test may be safely removed without affecting
+the semantics of the C code in FILE.  Use --name=FOO --name=BAR to also
+detect free-like functions named FOO and BAR.
+
+OPTIONS:
+
+   --list       print only the name of each matching FILE (\0-terminated)
+   --name=N     add name N to the list of \`free\'-like functions to detect;
+                  may be repeated
+
+   --help       display this help and exit
+   --version    output version information and exit
+
+Exit status:
+
+  0   one or more matches
+  1   no match
+  2   an error
+
+EXAMPLE:
+
+For example, this command prints all removable "if" tests before "free"
+and "kfree" calls in the linux kernel sources:
+
+    git ls-files -z |xargs -0 $ME --name=kfree
+
+EOF
+    }
+  exit $exit_code;
+}
+
+sub is_NULL ($)
+{
+  my ($expr) = @_;
+  return ($expr eq 'NULL' || $expr eq '0');
+}
+
+{
+  sub EXIT_MATCH {0}
+  sub EXIT_NO_MATCH {1}
+  sub EXIT_ERROR {2}
+  my $err = EXIT_NO_MATCH;
+
+  my $list;
+  my @name = qw(free);
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     list => \$list,
+     'name=s@' => \@name,
+    ) or usage 1;
+
+  # Make sure we have the right number of non-option arguments.
+  # Always tell the user why we fail.
+  @ARGV < 1
+    and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
+
+  my $or = join '|', @name;
+  my $regexp = qr/(?:$or)/;
+
+  # Set the input record separator.
+  # Note: this makes it impractical to print line numbers.
+  $/ = '"';
+
+  my $found_match = 0;
+ FILE:
+  foreach my $file (@ARGV)
+    {
+      open FH, '<', $file
+        or (warn "$ME: can't open `$file' for reading: $!\n"),
+          $err = EXIT_ERROR, next;
+      while (defined (my $line = <FH>))
+        {
+          while ($line =~
+              /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
+              #  1          2                  3
+               (?:   \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)|
+                \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
+            {
+              my $all = $1;
+              my ($lhs, $rhs) = ($2, $3);
+              my ($free_opnd, $braced_free_opnd) = ($4, $5);
+              my $non_NULL;
+              if (!defined $rhs) { $non_NULL = $lhs }
+              elsif (is_NULL $rhs) { $non_NULL = $lhs }
+              elsif (is_NULL $lhs) { $non_NULL = $rhs }
+              else { next }
+
+              # Compare the non-NULL part of the "if" expression and the
+              # free'd expression, without regard to white space.
+              $non_NULL =~ tr/ \t//d;
+              my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
+              $e2 =~ tr/ \t//d;
+              if ($non_NULL eq $e2)
+                {
+                  $found_match = 1;
+                  $list
+                    and (print "$file\0"), next FILE;
+                  print "$file: $all\n";
+                }
+            }
+        }
+    }
+  continue
+    {
+      close FH;
+    }
+
+  $found_match && $err == EXIT_NO_MATCH
+    and $err = EXIT_MATCH;
+
+  exit $err;
+}
+
+my $foo = <<'EOF';
+# The above is to *find* them.
+# This adjusts them, removing the unnecessary "if (p)" part.
+
+# FIXME: do something like this as an option (doesn't do braces):
+free=xfree
+git grep -l -z "$free *(" \
+  | xargs -0 useless-if-before-free -l --name="$free" \
+  | xargs -0 perl -0x3b -pi -e \
+   's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\))/$2/s'
+
+# Use the following to remove redundant uses of kfree inside braces.
+# Note that -0777 puts perl in slurp-whole-file mode;
+# but we have plenty of memory, these days...
+free=kfree
+git grep -l -z "$free *(" \
+  | xargs -0 useless-if-before-free -l --name="$free" \
+  | xargs -0 perl -0777 -pi -e \
+     's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
+
+Be careful that the result of the above transformation is valid.
+If the matched string is followed by "else", then obviously, it won't be.
+
+When modifying files, refuse to process anything other than a regular file.
+EOF
+
+## Local Variables:
+## mode: perl
+## indent-tabs-mode: nil
+## eval: (add-hook 'write-file-hooks 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/vc-list-files b/build-aux/vc-list-files
new file mode 100755 (executable)
index 0000000..48a33ee
--- /dev/null
@@ -0,0 +1,118 @@
+#!/bin/sh
+# List version-controlled file names.
+
+# Print a version string.
+scriptversion=2010-04-23.22; # UTC
+
+# Copyright (C) 2006-2010 Free Software Foundation, Inc.
+
+# 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/>.
+
+
+# List the specified version-controlled files.
+# With no argument, list them all.  With a single DIRECTORY argument,
+# list the version-controlled files in that directory.
+
+# If there's an argument, it must be a single, "."-relative directory name.
+# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/
+
+postprocess=
+case $1 in
+  --help) cat <<EOF
+Usage: $0 [-C SRCDIR] [DIR]
+
+Output a list of version-controlled files in DIR (default .), relative to
+SRCDIR (default .).  SRCDIR must be the top directory of a checkout.
+
+Options:
+  --help     print this help, then exit
+  --version  print version number, then exit
+  -C SRCDIR  change directory to SRCDIR before generating list
+
+Report bugs and patches to <bug-gnulib@gnu.org>.
+EOF
+    exit ;;
+
+  --version)
+    year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
+    cat <<EOF
+vc-list-files $scriptversion
+Copyright (C) $year Free Software Foundation, Inc,
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+EOF
+    exit ;;
+
+  -C)
+    test "$2" = . || postprocess="| sed 's|^|$2/|'"
+    cd "$2" || exit 1
+    shift; shift ;;
+esac
+
+dir=
+case $# in
+  0) ;;
+  1) dir=$1 ;;
+  *) echo "$0: too many arguments" 1>&2
+     echo "Usage: $0 [-C srcdir] [DIR]" 1>&2; exit 1;;
+esac
+
+test "x$dir" = x && dir=.
+
+if test -d .git; then
+  test "x$dir" = x. \
+    && dir= sed_esc= \
+    || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
+  # Ignore git symlinks - either they point into the tree, in which case
+  # we don't need to visit the target twice, or they point somewhere
+  # else (often into a submodule), in which case the content does not
+  # belong to this package.
+  eval exec git ls-tree -r 'HEAD:"$dir"' \
+    \| sed -n '"s/^100[^       ]*./$sed_esc/p"' $postprocess
+elif test -d .hg; then
+  eval exec hg locate '"$dir/*"' $postprocess
+elif test -d .bzr; then
+  test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+  eval exec bzr ls -R --versioned '"$dir"' $postprocess
+elif test -d CVS; then
+  test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
+  if test -x build-aux/cvsu; then
+    eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
+  elif (cvsu --help) >/dev/null 2>&1; then
+    eval cvsu --find --types=AFGM '"$dir"' $postprocess
+  else
+    eval awk -F/ \''{                  \
+       if (!$1 && $3 !~ /^-/) {        \
+         f=FILENAME;                   \
+         if (f ~ /CVS\/Entries$/)      \
+           f = substr(f, 1, length(f)-11); \
+         print f $2;                   \
+       }}'\''                          \
+      `find "$dir" -name Entries -print` /dev/null' $postprocess
+  fi
+elif test -d .svn; then
+  eval exec svn list -R '"$dir"' $postprocess
+else
+  echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
+  exit 1
+fi
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/warn-on-use.h b/build-aux/warn-on-use.h
new file mode 100644 (file)
index 0000000..171e599
--- /dev/null
@@ -0,0 +1,109 @@
+/* A C macro for emitting warnings if a function is used.
+   Copyright (C) 2010 Free Software Foundation, Inc.
+
+   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
+   Lesser 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/>.  */
+
+/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+   for FUNCTION which will then trigger a compiler warning containing
+   the text of "literal string" anywhere that function is called, if
+   supported by the compiler.  If the compiler does not support this
+   feature, the macro expands to an unused extern declaration.
+
+   This macro is useful for marking a function as a potential
+   portability trap, with the intent that "literal string" include
+   instructions on the replacement function that should be used
+   instead.  However, one of the reasons that a function is a
+   portability trap is if it has the wrong signature.  Declaring
+   FUNCTION with a different signature in C is a compilation error, so
+   this macro must use the same type as any existing declaration so
+   that programs that avoid the problematic FUNCTION do not fail to
+   compile merely because they included a header that poisoned the
+   function.  But this implies that _GL_WARN_ON_USE is only safe to
+   use if FUNCTION is known to already have a declaration.  Use of
+   this macro implies that there must not be any other macro hiding
+   the declaration of FUNCTION; but undefining FUNCTION first is part
+   of the poisoning process anyway (although for symbols that are
+   provided only via a macro, the result is a compilation error rather
+   than a warning containing "literal string").  Also note that in
+   C++, it is only safe to use if FUNCTION has no overloads.
+
+   For an example, it is possible to poison 'getline' by:
+   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+     [getline]) in configure.ac, which potentially defines
+     HAVE_RAW_DECL_GETLINE
+   - adding this code to a header that wraps the system <stdio.h>:
+     #undef getline
+     #if HAVE_RAW_DECL_GETLINE
+     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+       "not universally present; use the gnulib module getline");
+     #endif
+
+   It is not possible to directly poison global variables.  But it is
+   possible to write a wrapper accessor function, and poison that
+   (less common usage, like &environ, will cause a compilation error
+   rather than issue the nice warning, but the end result of informing
+   the developer about their portability problem is still achieved):
+   #if HAVE_RAW_DECL_ENVIRON
+   static inline char ***rpl_environ (void) { return &environ; }
+   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+   # undef environ
+   # define environ (*rpl_environ ())
+   #endif
+   */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/build-aux/ylwrap b/build-aux/ylwrap
new file mode 100755 (executable)
index 0000000..84d5634
--- /dev/null
@@ -0,0 +1,222 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2009-04-28.21; # UTC
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2001, 2002, 2003, 2004, 2005,
+# 2007, 2009 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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 2, 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/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case "$1" in
+  '')
+    echo "$0: No files given.  Try \`$0 --help' for more information." 1>&2
+    exit 1
+    ;;
+  --basedir)
+    basedir=$2
+    shift 2
+    ;;
+  -h|--h*)
+    cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+  INPUT is the input file
+  OUTPUT is one file PROG generates
+  DESIRED is the file we actually want instead of OUTPUT
+  PROGRAM is program to run
+  ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v|--v*)
+    echo "ylwrap $scriptversion"
+    exit $?
+    ;;
+esac
+
+
+# The input.
+input="$1"
+shift
+case "$input" in
+  [\\/]* | ?:[\\/]*)
+    # Absolute path; do nothing.
+    ;;
+  *)
+    # Relative path.  Make it absolute.
+    input="`pwd`/$input"
+    ;;
+esac
+
+pairlist=
+while test "$#" -ne 0; do
+  if test "$1" = "--"; then
+    shift
+    break
+  fi
+  pairlist="$pairlist $1"
+  shift
+done
+
+# The program to run.
+prog="$1"
+shift
+# Make any relative path in $prog absolute.
+case "$prog" in
+  [\\/]* | ?:[\\/]*) ;;
+  *[\\/]*) prog="`pwd`/$prog" ;;
+esac
+
+# FIXME: add hostname here for parallel makes that run commands on
+# other machines.  But that might take us over the 14-char limit.
+dirname=ylwrap$$
+trap "cd '`pwd`'; rm -rf $dirname > /dev/null 2>&1" 1 2 3 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+  set X $pairlist
+  shift
+  first=yes
+  # Since DOS filename conventions don't allow two dots,
+  # the DOS version of Bison writes out y_tab.c instead of y.tab.c
+  # and y_tab.h instead of y.tab.h. Test to see if this is the case.
+  y_tab_nodot="no"
+  if test -f y_tab.c || test -f y_tab.h; then
+    y_tab_nodot="yes"
+  fi
+
+  # The directory holding the input.
+  input_dir=`echo "$input" | sed -e 's,\([\\/]\)[^\\/]*$,\1,'`
+  # Quote $INPUT_DIR so we can use it in a regexp.
+  # FIXME: really we should care about more than `.' and `\'.
+  input_rx=`echo "$input_dir" | sed 's,\\\\,\\\\\\\\,g;s,\\.,\\\\.,g'`
+
+  while test "$#" -ne 0; do
+    from="$1"
+    # Handle y_tab.c and y_tab.h output by DOS
+    if test $y_tab_nodot = "yes"; then
+      if test $from = "y.tab.c"; then
+       from="y_tab.c"
+      else
+       if test $from = "y.tab.h"; then
+         from="y_tab.h"
+       fi
+      fi
+    fi
+    if test -f "$from"; then
+      # If $2 is an absolute path name, then just use that,
+      # otherwise prepend `../'.
+      case "$2" in
+       [\\/]* | ?:[\\/]*) target="$2";;
+       *) target="../$2";;
+      esac
+
+      # We do not want to overwrite a header file if it hasn't
+      # changed.  This avoid useless recompilations.  However the
+      # parser itself (the first file) should always be updated,
+      # because it is the destination of the .y.c rule in the
+      # Makefile.  Divert the output of all other files to a temporary
+      # file so we can compare them to existing versions.
+      if test $first = no; then
+       realtarget="$target"
+       target="tmp-`echo $target | sed s/.*[\\/]//g`"
+      fi
+      # Edit out `#line' or `#' directives.
+      #
+      # We don't want the resulting debug information to point at
+      # an absolute srcdir; it is better for it to just mention the
+      # .y file with no path.
+      #
+      # We want to use the real output file name, not yy.lex.c for
+      # instance.
+      #
+      # We want the include guards to be adjusted too.
+      FROM=`echo "$from" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+      TARGET=`echo "$2" | sed \
+            -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'\
+            -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`
+
+      sed -e "/^#/!b" -e "s,$input_rx,," -e "s,$from,$2," \
+          -e "s,$FROM,$TARGET," "$from" >"$target" || ret=$?
+
+      # Check whether header files must be updated.
+      if test $first = no; then
+       if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+         echo "$2" is unchanged
+         rm -f "$target"
+       else
+          echo updating "$2"
+          mv -f "$target" "$realtarget"
+        fi
+      fi
+    else
+      # A missing file is only an error for the first file.  This
+      # is a blatant hack to let us support using "yacc -d".  If -d
+      # is not specified, we don't want an error when the header
+      # file is "missing".
+      if test $first = yes; then
+        ret=1
+      fi
+    fi
+    shift
+    shift
+    first=no
+  done
+else
+  ret=$?
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/cfg.mk b/cfg.mk
new file mode 100644 (file)
index 0000000..d52b68c
--- /dev/null
+++ b/cfg.mk
@@ -0,0 +1,98 @@
+# Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+# Inc.
+# Author: Simon Josefsson
+#
+# 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/>.
+
+WFLAGS ?= --enable-gcc-warnings
+ADDFLAGS ?=
+CFGFLAGS ?= --enable-gtk-doc --enable-gtk-doc-pdf $(ADDFLAGS) $(WFLAGS)
+
+INDENT_SOURCES = `find . -name \*.[ch]|grep -v -e ^./gl -e ^./lib/gl -e ^./build-aux/ -e ^./lib/ASN1.c -e ^./tests/Test_tree_asn1_tab.c`
+
+ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
+.DEFAULT_GOAL := bootstrap
+endif
+
+local-checks-to-skip = sc_prohibit_strcmp sc_prohibit_have_config_h    \
+       sc_require_config_h sc_require_config_h_first                   \
+       sc_immutable_NEWS sc_prohibit_magic_number_exit
+VC_LIST_ALWAYS_EXCLUDE_REGEX = ^(build-aux|gl|lib/gllib|lib/glm4)/.*$
+
+bootstrap-tools := autoconf,automake,libtool,bison
+gpg_key_ID = b565716f
+
+autoreconf:
+       test -f ./configure || autoreconf --install
+
+bootstrap: autoreconf
+       ./configure $(CFGFLAGS)
+
+web-coverage:
+       rm -fv `find $(htmldir)/coverage -type f | grep -v CVS`
+       cp -rv $(COVERAGE_OUT)/* $(htmldir)/coverage/
+
+upload-web-coverage:
+       cd $(htmldir) && \
+               cvs commit -m "Update." coverage
+
+W32ROOT ?= $(HOME)/gnutls4win/inst
+
+mingw32: autoreconf
+       ./configure --enable-gtk-doc --host=i586-mingw32msvc --build=`./config.guess` --prefix=$(W32ROOT)
+
+ChangeLog:
+       git2cl > ChangeLog
+       cat .clcopying >> ChangeLog
+
+htmldir = ../www-$(PACKAGE)
+tag = $(PACKAGE)_`echo $(VERSION) | sed 's/\./_/g'`
+
+release: prepare upload web upload-web
+
+prepare:
+       ! git tag -l $(tag) | grep $(PACKAGE) > /dev/null
+       rm -f ChangeLog
+       $(MAKE) ChangeLog distcheck
+       git commit -m Generated. ChangeLog
+       git tag -u b565716f! -m $(VERSION) $(tag)
+
+upload:
+       git push
+       git push --tags
+       gnupload --to ftp.gnu.org:libtasn1 $(distdir).tar.gz
+       scp $(distdir).tar.gz $(distdir).tar.gz.sig igloo.linux.gr:~ftp/pub/gnutls/libtasn1/
+       ssh igloo.linux.gr 'cd ~ftp/pub/gnutls/libtasn1/ && sha1sum *.tar.gz > CHECKSUMS'
+       cp $(distdir).tar.gz $(distdir).tar.gz.sig ../releases/$(PACKAGE)/
+
+web:
+       cd doc && ../build-aux/gendocs.sh --html "--css-include=texinfo.css" \
+               -o ../$(htmldir)/manual/ $(PACKAGE) "$(PACKAGE_NAME)"
+       cp -v doc/reference/$(PACKAGE).pdf doc/reference/html/*.html doc/reference/html/*.png doc/reference/html/*.devhelp doc/reference/html/*.css $(htmldir)/reference/
+       cp -v doc/cyclo/cyclo-$(PACKAGE).html $(htmldir)/cyclo/index.html
+
+upload-web:
+       cd $(htmldir) && cvs commit -m "Update." manual/ reference/
+
+review-diff:
+       git diff `git describe --abbrev=0`.. \
+       | grep -v -e ^index -e '^diff --git' \
+       | filterdiff -p 1 -x 'gl/*' -x 'build-aux/*' -x 'lib/gl*' -x 'po/*' -x 'maint.mk' -x '.gitignore' -x '.x-sc*' -x ChangeLog -x GNUmakefile -x 'lib/ASN1.c' \
+       | less
+
+# Work around maint.mk issue.
+taint-distcheck:
+my-distcheck:
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..c07489e
--- /dev/null
@@ -0,0 +1,559 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if the compiler is building for multiple architectures of Apple
+   platforms at once. */
+#undef AA_APPLE_UNIVERSAL_BUILD
+
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#undef BITSIZEOF_PTRDIFF_T
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#undef BITSIZEOF_SIG_ATOMIC_T
+
+/* Define to the number of bits in type 'size_t'. */
+#undef BITSIZEOF_SIZE_T
+
+/* Define to the number of bits in type 'wchar_t'. */
+#undef BITSIZEOF_WCHAR_T
+
+/* Define to the number of bits in type 'wint_t'. */
+#undef BITSIZEOF_WINT_T
+
+/* Define to 1 when the gnulib module getopt-gnu should be tested. */
+#undef GNULIB_TEST_GETOPT_GNU
+
+/* Define to 1 when the gnulib module realloc-posix should be tested. */
+#undef GNULIB_TEST_REALLOC_POSIX
+
+/* Define to 1 when the gnulib module strverscmp should be tested. */
+#undef GNULIB_TEST_STRVERSCMP
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#undef HAVE_DECL_GETENV
+
+/* Define to 1 if you have the declaration of `getopt_clip', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETOPT_CLIP
+
+/* Define to 1 if you have the declaration of `optreset', and to 0 if you
+   don't. */
+#undef HAVE_DECL_OPTRESET
+
+/* Define to 1 if you have the declaration of `program_invocation_name', and
+   to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
+
+/* Define to 1 if you have the declaration of `program_invocation_short_name',
+   and to 0 if you don't. */
+#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <getopt.h> header file. */
+#undef HAVE_GETOPT_H
+
+/* Define to 1 if you have the `getopt_long_only' function. */
+#undef HAVE_GETOPT_LONG_ONLY
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if the system has the type `long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <random.h> header file. */
+#undef HAVE_RANDOM_H
+
+/* Define to 1 if atoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ATOLL
+
+/* Define to 1 if btowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_BTOWC
+
+/* Define to 1 if canonicalize_file_name is declared even after undefining
+   macros. */
+#undef HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+
+/* Define to 1 if chown is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_CHOWN
+
+/* Define to 1 if dup2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP2
+
+/* Define to 1 if dup3 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_DUP3
+
+/* Define to 1 if endusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ENDUSERSHELL
+
+/* Define to 1 if environ is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_ENVIRON
+
+/* Define to 1 if euidaccess is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_EUIDACCESS
+
+/* Define to 1 if faccessat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FACCESSAT
+
+/* Define to 1 if fchdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHDIR
+
+/* Define to 1 if fchownat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FCHOWNAT
+
+/* Define to 1 if fsync is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FSYNC
+
+/* Define to 1 if ftruncate is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_FTRUNCATE
+
+/* Define to 1 if getcwd is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETCWD
+
+/* Define to 1 if getdomainname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDOMAINNAME
+
+/* Define to 1 if getdtablesize is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETDTABLESIZE
+
+/* Define to 1 if getgroups is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETGROUPS
+
+/* Define to 1 if gethostname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETHOSTNAME
+
+/* Define to 1 if getloadavg is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOADAVG
+
+/* Define to 1 if getlogin is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOGIN
+
+/* Define to 1 if getlogin_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETLOGIN_R
+
+/* Define to 1 if getpagesize is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETPAGESIZE
+
+/* Define to 1 if getsubopt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETSUBOPT
+
+/* Define to 1 if getusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GETUSERSHELL
+
+/* Define to 1 if grantpt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_GRANTPT
+
+/* Define to 1 if initstat_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_INITSTAT_R
+
+/* Define to 1 if lchown is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LCHOWN
+
+/* Define to 1 if link is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LINK
+
+/* Define to 1 if linkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LINKAT
+
+/* Define to 1 if lseek is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_LSEEK
+
+/* Define to 1 if mbrlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRLEN
+
+/* Define to 1 if mbrtowc is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBRTOWC
+
+/* Define to 1 if mbsinit is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSINIT
+
+/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSNRTOWCS
+
+/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MBSRTOWCS
+
+/* Define to 1 if memmem is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMMEM
+
+/* Define to 1 if mempcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMPCPY
+
+/* Define to 1 if memrchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MEMRCHR
+
+/* Define to 1 if mkdtemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKDTEMP
+
+/* Define to 1 if mkostemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKOSTEMP
+
+/* Define to 1 if mkostemps is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKOSTEMPS
+
+/* Define to 1 if mkstemp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKSTEMP
+
+/* Define to 1 if mkstemps is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_MKSTEMPS
+
+/* Define to 1 if pipe2 is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PIPE2
+
+/* Define to 1 if pread is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PREAD
+
+/* Define to 1 if ptsname is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PTSNAME
+
+/* Define to 1 if pwrite is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_PWRITE
+
+/* Define to 1 if random_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RANDOM_R
+
+/* Define to 1 if rawmemchr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RAWMEMCHR
+
+/* Define to 1 if readlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_READLINK
+
+/* Define to 1 if readlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_READLINKAT
+
+/* Define to 1 if realpath is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_REALPATH
+
+/* Define to 1 if rmdir is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RMDIR
+
+/* Define to 1 if rpmatch is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_RPMATCH
+
+/* Define to 1 if setenv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETENV
+
+/* Define to 1 if setstate_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETSTATE_R
+
+/* Define to 1 if setusershell is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SETUSERSHELL
+
+/* Define to 1 if sleep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SLEEP
+
+/* Define to 1 if srandom_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SRANDOM_R
+
+/* Define to 1 if stpcpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPCPY
+
+/* Define to 1 if stpncpy is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STPNCPY
+
+/* Define to 1 if strcasestr is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCASESTR
+
+/* Define to 1 if strchrnul is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRCHRNUL
+
+/* Define to 1 if strdup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRDUP
+
+/* Define to 1 if strncat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNCAT
+
+/* Define to 1 if strndup is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNDUP
+
+/* Define to 1 if strnlen is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRNLEN
+
+/* Define to 1 if strpbrk is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRPBRK
+
+/* Define to 1 if strsep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSEP
+
+/* Define to 1 if strsignal is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRSIGNAL
+
+/* Define to 1 if strtod is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOD
+
+/* Define to 1 if strtok_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOK_R
+
+/* Define to 1 if strtoll is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOLL
+
+/* Define to 1 if strtoull is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRTOULL
+
+/* Define to 1 if strverscmp is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_STRVERSCMP
+
+/* Define to 1 if symlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SYMLINK
+
+/* Define to 1 if symlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_SYMLINKAT
+
+/* Define to 1 if ttyname_r is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_TTYNAME_R
+
+/* Define to 1 if unlink is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLINK
+
+/* Define to 1 if unlinkat is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLINKAT
+
+/* Define to 1 if unlockpt is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNLOCKPT
+
+/* Define to 1 if unsetenv is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_UNSETENV
+
+/* Define to 1 if usleep is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_USLEEP
+
+/* Define to 1 if wcrtomb is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCRTOMB
+
+/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSNRTOMBS
+
+/* Define to 1 if wcsrtombs is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCSRTOMBS
+
+/* Define to 1 if wctob is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCTOB
+
+/* Define to 1 if wcwidth is declared even after undefining macros. */
+#undef HAVE_RAW_DECL_WCWIDTH
+
+/* Define if the 'realloc' function is POSIX compliant. */
+#undef HAVE_REALLOC_POSIX
+
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#undef HAVE_SIGNED_SIG_ATOMIC_T
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#undef HAVE_SIGNED_WCHAR_T
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#undef HAVE_SIGNED_WINT_T
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if the system has the type `struct random_data'. */
+#undef HAVE_STRUCT_RANDOM_DATA
+
+/* Define to 1 if you have the `strverscmp' function. */
+#undef HAVE_STRVERSCMP
+
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+#undef HAVE_SYS_INTTYPES_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 or 0, depending whether the compiler supports simple visibility
+   declarations. */
+#undef HAVE_VISIBILITY
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#undef LT_OBJDIR
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* String identifying the packager of this software */
+#undef PACKAGE_PACKAGER
+
+/* Packager info for bug reports (URL/e-mail/...) */
+#undef PACKAGE_PACKAGER_BUG_REPORTS
+
+/* Packager-specific version information */
+#undef PACKAGE_PACKAGER_VERSION
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+#undef SIG_ATOMIC_T_SUFFIX
+
+/* The size of `unsigned int', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_INT
+
+/* The size of `unsigned long int', as computed by sizeof. */
+#undef SIZEOF_UNSIGNED_LONG_INT
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+#undef SIZE_T_SUFFIX
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Version number of package */
+#undef VERSION
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+#undef WCHAR_T_SUFFIX
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+#undef WINT_T_SUFFIX
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Define to 500 only on HP-UX. */
+#undef _XOPEN_SOURCE
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+
+
+/* Define to rpl_ if the getopt replacement functions and variables should be
+   used. */
+#undef __GETOPT_PREFIX
+
+/* A replacement for va_copy, if needed.  */
+#define gl_va_copy(a,b) ((a) = (b))
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for MacOS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+
+/* Define as a macro for copying va_list variables. */
+#undef va_copy
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..efa306d
--- /dev/null
+++ b/configure
@@ -0,0 +1,19605 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.65 for GNU Libtasn1 2.7.
+#
+# Report bugs to <bug-gnutls@gnu.org>.
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  as_found=:
+  case $as_dir in #(
+        /*)
+          for as_base in sh bash ksh sh5; do
+            # Try only shells that exist, to save several forks.
+            as_shell=$as_dir/$as_base
+            if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
+          done;;
+       esac
+  as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+       # neutralization value for shells without unset; and this also
+       # works around shells that cannot unset nonexistent variables.
+       BASH_ENV=/dev/null
+       ENV=/dev/null
+       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+       export CONFIG_SHELL
+       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-gnutls@gnu.org
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+  fi
+  exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+$*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL $0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "$0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='GNU Libtasn1'
+PACKAGE_TARNAME='libtasn1'
+PACKAGE_VERSION='2.7'
+PACKAGE_STRING='GNU Libtasn1 2.7'
+PACKAGE_BUGREPORT='bug-gnutls@gnu.org'
+PACKAGE_URL='http://www.gnu.org/software/libtasn1/'
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+gl_getopt_required=POSIX
+ac_header_list=
+gl_getopt_required=POSIX
+ac_subst_vars='lgltests_LTLIBOBJS
+lgltests_LIBOBJS
+lgl_LTLIBOBJS
+lgl_LIBOBJS
+gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LTLIBOBJS
+gl_LIBOBJS
+CONFIG_INCLUDE
+am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+WERROR_CFLAGS
+lgltests_WITNESS
+NEXT_AS_FIRST_DIRECTIVE_STRING_H
+NEXT_STRING_H
+UNDEFINE_STRTOK_R
+REPLACE_STRTOK_R
+REPLACE_STRSIGNAL
+REPLACE_STRNLEN
+REPLACE_STRNDUP
+REPLACE_STRNCAT
+REPLACE_STRERROR
+REPLACE_STRCASESTR
+REPLACE_STRSTR
+REPLACE_STRDUP
+REPLACE_STPNCPY
+REPLACE_MEMMEM
+REPLACE_MEMCHR
+HAVE_STRVERSCMP
+HAVE_DECL_STRSIGNAL
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+HAVE_MEMCHR
+HAVE_MBSLEN
+GNULIB_STRVERSCMP
+GNULIB_STRSIGNAL
+GNULIB_STRERROR
+GNULIB_MBSTOK_R
+GNULIB_MBSSEP
+GNULIB_MBSSPN
+GNULIB_MBSPBRK
+GNULIB_MBSCSPN
+GNULIB_MBSCASESTR
+GNULIB_MBSPCASECMP
+GNULIB_MBSNCASECMP
+GNULIB_MBSCASECMP
+GNULIB_MBSSTR
+GNULIB_MBSRCHR
+GNULIB_MBSCHR
+GNULIB_MBSNLEN
+GNULIB_MBSLEN
+GNULIB_STRTOK_R
+GNULIB_STRCASESTR
+GNULIB_STRSTR
+GNULIB_STRSEP
+GNULIB_STRPBRK
+GNULIB_STRNLEN
+GNULIB_STRNDUP
+GNULIB_STRNCAT
+GNULIB_STRDUP
+GNULIB_STRCHRNUL
+GNULIB_STPNCPY
+GNULIB_STPCPY
+GNULIB_RAWMEMCHR
+GNULIB_MEMRCHR
+GNULIB_MEMPCPY
+GNULIB_MEMMEM
+GNULIB_MEMCHR
+HAVE_VISIBILITY
+CFLAG_VISIBILITY
+HAVE_LD_VERSION_SCRIPT_FALSE
+HAVE_LD_VERSION_SCRIPT_TRUE
+gltests_WITNESS
+HAVE_WINT_T
+HAVE_WCHAR_H
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
+NEXT_WCHAR_H
+REPLACE_WCWIDTH
+REPLACE_WCSNRTOMBS
+REPLACE_WCSRTOMBS
+REPLACE_WCRTOMB
+REPLACE_MBSNRTOWCS
+REPLACE_MBSRTOWCS
+REPLACE_MBRLEN
+REPLACE_MBRTOWC
+REPLACE_MBSINIT
+REPLACE_WCTOB
+REPLACE_BTOWC
+REPLACE_MBSTATE_T
+HAVE_DECL_WCWIDTH
+HAVE_DECL_WCTOB
+HAVE_WCSNRTOMBS
+HAVE_WCSRTOMBS
+HAVE_WCRTOMB
+HAVE_MBSNRTOWCS
+HAVE_MBSRTOWCS
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSINIT
+HAVE_BTOWC
+GNULIB_WCWIDTH
+GNULIB_WCSNRTOMBS
+GNULIB_WCSRTOMBS
+GNULIB_WCRTOMB
+GNULIB_MBSNRTOWCS
+GNULIB_MBSRTOWCS
+GNULIB_MBRLEN
+GNULIB_MBRTOWC
+GNULIB_MBSINIT
+GNULIB_WCTOB
+GNULIB_BTOWC
+WARN_CFLAGS
+VALGRIND
+HAVE_UNISTD_H
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H
+NEXT_UNISTD_H
+HAVE_RANDOM_H
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H
+NEXT_STDLIB_H
+STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIG_ATOMIC_T_SUFFIX
+SIZE_T_SUFFIX
+PTRDIFF_T_SUFFIX
+HAVE_SIGNED_WINT_T
+HAVE_SIGNED_WCHAR_T
+HAVE_SIGNED_SIG_ATOMIC_T
+BITSIZEOF_WINT_T
+BITSIZEOF_WCHAR_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_SIZE_T
+BITSIZEOF_PTRDIFF_T
+HAVE_SYS_BITYPES_H
+HAVE_SYS_INTTYPES_H
+HAVE_STDINT_H
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H
+NEXT_STDINT_H
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_UNSIGNED_LONG_LONG_INT
+HAVE_LONG_LONG_INT
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
+NEXT_STDDEF_H
+STDDEF_H
+HAVE_WCHAR_T
+REPLACE_NULL
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H
+NEXT_STDARG_H
+STDARG_H
+REPLACE_UNSETENV
+REPLACE_STRTOD
+REPLACE_SETENV
+REPLACE_REALPATH
+REPLACE_PUTENV
+REPLACE_MKSTEMP
+REPLACE_CANONICALIZE_FILE_NAME
+HAVE_UNSETENV
+HAVE_UNLOCKPT
+HAVE_SYS_LOADAVG_H
+HAVE_STRUCT_RANDOM_DATA
+HAVE_STRTOULL
+HAVE_STRTOLL
+HAVE_STRTOD
+HAVE_SETENV
+HAVE_RPMATCH
+HAVE_REALPATH
+HAVE_RANDOM_R
+HAVE_PTSNAME
+HAVE_MKSTEMPS
+HAVE_MKSTEMP
+HAVE_MKOSTEMPS
+HAVE_MKOSTEMP
+HAVE_MKDTEMP
+HAVE_MALLOC_POSIX
+HAVE_GRANTPT
+HAVE_GETSUBOPT
+HAVE_DECL_GETLOADAVG
+HAVE_CANONICALIZE_FILE_NAME
+HAVE_CALLOC_POSIX
+HAVE_ATOLL
+GNULIB_UNSETENV
+GNULIB_UNLOCKPT
+GNULIB_STRTOULL
+GNULIB_STRTOLL
+GNULIB_STRTOD
+GNULIB_SETENV
+GNULIB_RPMATCH
+GNULIB_REALPATH
+GNULIB_REALLOC_POSIX
+GNULIB_RANDOM_R
+GNULIB_PUTENV
+GNULIB_PTSNAME
+GNULIB_MKSTEMPS
+GNULIB_MKSTEMP
+GNULIB_MKOSTEMPS
+GNULIB_MKOSTEMP
+GNULIB_MKDTEMP
+GNULIB_MALLOC_POSIX
+GNULIB_GRANTPT
+GNULIB_GETSUBOPT
+GNULIB_GETLOADAVG
+GNULIB_CANONICALIZE_FILE_NAME
+GNULIB_CALLOC_POSIX
+GNULIB_ATOLL
+HAVE_REALLOC_POSIX
+PMCCABE
+APPLE_UNIVERSAL_BUILD
+LTLIBINTL
+LIBINTL
+GETOPT_H
+HAVE_GETOPT_H
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H
+NEXT_GETOPT_H
+PRAGMA_SYSTEM_HEADER
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE
+INCLUDE_NEXT
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS
+UNISTD_H_HAVE_WINSOCK2_H
+REPLACE_WRITE
+REPLACE_USLEEP
+REPLACE_UNLINKAT
+REPLACE_UNLINK
+REPLACE_TTYNAME_R
+REPLACE_SYMLINK
+REPLACE_SLEEP
+REPLACE_RMDIR
+REPLACE_READLINK
+REPLACE_PWRITE
+REPLACE_PREAD
+REPLACE_LSEEK
+REPLACE_LINKAT
+REPLACE_LINK
+REPLACE_LCHOWN
+REPLACE_GETPAGESIZE
+REPLACE_GETGROUPS
+REPLACE_GETCWD
+REPLACE_FCHOWNAT
+REPLACE_DUP2
+REPLACE_DUP
+REPLACE_CLOSE
+REPLACE_CHOWN
+HAVE_SYS_PARAM_H
+HAVE_OS_H
+HAVE_DECL_GETUSERSHELL
+HAVE_DECL_GETPAGESIZE
+HAVE_DECL_GETLOGIN_R
+HAVE_DECL_ENVIRON
+HAVE_USLEEP
+HAVE_UNLINKAT
+HAVE_TTYNAME_R
+HAVE_SYMLINKAT
+HAVE_SYMLINK
+HAVE_SLEEP
+HAVE_READLINKAT
+HAVE_READLINK
+HAVE_PWRITE
+HAVE_PREAD
+HAVE_PIPE2
+HAVE_LINKAT
+HAVE_LINK
+HAVE_LCHOWN
+HAVE_GETPAGESIZE
+HAVE_GETLOGIN
+HAVE_GETHOSTNAME
+HAVE_GETGROUPS
+HAVE_GETDTABLESIZE
+HAVE_GETDOMAINNAME
+HAVE_FTRUNCATE
+HAVE_FSYNC
+HAVE_FCHOWNAT
+HAVE_FCHDIR
+HAVE_FACCESSAT
+HAVE_EUIDACCESS
+HAVE_DUP3
+HAVE_DUP2
+HAVE_CHOWN
+GNULIB_WRITE
+GNULIB_USLEEP
+GNULIB_UNLINKAT
+GNULIB_UNLINK
+GNULIB_UNISTD_H_SIGPIPE
+GNULIB_UNISTD_H_GETOPT
+GNULIB_TTYNAME_R
+GNULIB_SYMLINKAT
+GNULIB_SYMLINK
+GNULIB_SLEEP
+GNULIB_RMDIR
+GNULIB_READLINKAT
+GNULIB_READLINK
+GNULIB_PWRITE
+GNULIB_PREAD
+GNULIB_PIPE2
+GNULIB_LSEEK
+GNULIB_LINKAT
+GNULIB_LINK
+GNULIB_LCHOWN
+GNULIB_GETUSERSHELL
+GNULIB_GETPAGESIZE
+GNULIB_GETLOGIN_R
+GNULIB_GETLOGIN
+GNULIB_GETHOSTNAME
+GNULIB_GETGROUPS
+GNULIB_GETDTABLESIZE
+GNULIB_GETDOMAINNAME
+GNULIB_GETCWD
+GNULIB_FTRUNCATE
+GNULIB_FSYNC
+GNULIB_FCHOWNAT
+GNULIB_FCHDIR
+GNULIB_FACCESSAT
+GNULIB_EUIDACCESS
+GNULIB_ENVIRON
+GNULIB_DUP3
+GNULIB_DUP2
+GNULIB_CLOSE
+GNULIB_CHOWN
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+GTK_DOC_USE_REBASE_FALSE
+GTK_DOC_USE_REBASE_TRUE
+GTK_DOC_USE_LIBTOOL_FALSE
+GTK_DOC_USE_LIBTOOL_TRUE
+GTK_DOC_BUILD_PDF_FALSE
+GTK_DOC_BUILD_PDF_TRUE
+GTK_DOC_BUILD_HTML_FALSE
+GTK_DOC_BUILD_HTML_TRUE
+ENABLE_GTK_DOC_FALSE
+ENABLE_GTK_DOC_TRUE
+PKG_CONFIG
+HTML_DIR
+GTKDOC_MKPDF
+GTKDOC_REBASE
+GTKDOC_CHECK
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+lt_ECHO
+AR
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+SED
+LIBTOOL
+OBJDUMP
+DLLTOOL
+AS
+HELP2MAN
+PERL
+LN_S
+YFLAGS
+YACC
+EGREP
+GREP
+CPP
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+RANLIB
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+LT_AGE
+LT_REVISION
+LT_CURRENT
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_dependency_tracking
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_gnu_ld
+enable_libtool_lock
+with_html_dir
+enable_gtk_doc
+enable_gtk_doc_html
+enable_gtk_doc_pdf
+enable_valgrind_tests
+with_packager
+with_packager_version
+with_packager_bug_reports
+enable_ld_version_script
+enable_gcc_warnings
+'
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+YACC
+YFLAGS
+PKG_CONFIG'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)   ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid feature name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"enable_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval enable_$ac_useropt=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+      as_fn_error "invalid package name: $ac_useropt"
+    ac_useropt_orig=$ac_useropt
+    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    case $ac_user_opts in
+      *"
+"with_$ac_useropt"
+"*) ;;
+      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+        ac_unrecognized_sep=', ';;
+    esac
+    eval with_$ac_useropt=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) as_fn_error "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information."
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    case $ac_envvar in #(
+      '' | [0-9]* | *[!_$as_cr_alnum]* )
+      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+    esac
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  as_fn_error "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+  case $enable_option_checking in
+    no) ;;
+    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+  esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
+               datadir sysconfdir sharedstatedir localstatedir includedir \
+               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+               libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  # Remove trailing slashes.
+  case $ac_val in
+    */ )
+      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+      eval $ac_var=\$ac_val;;
+  esac
+  # Be sure to have absolute directory names.
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  as_fn_error "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  as_fn_error "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_myself" : 'X\(//\)[^/]' \| \
+        X"$as_myself" : 'X\(//\)$' \| \
+        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+       pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures GNU Libtasn1 2.7 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR            user executables [EPREFIX/bin]
+  --sbindir=DIR           system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR        program executables [EPREFIX/libexec]
+  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --libdir=DIR            object code libraries [EPREFIX/lib]
+  --includedir=DIR        C header files [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
+  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR           info documentation [DATAROOTDIR/info]
+  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR            man documentation [DATAROOTDIR/man]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/libtasn1]
+  --htmldir=DIR           html documentation [DOCDIR]
+  --dvidir=DIR            dvi documentation [DOCDIR]
+  --pdfdir=DIR            pdf documentation [DOCDIR]
+  --psdir=DIR             ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of GNU Libtasn1 2.7:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-option-checking  ignore unrecognized --enable/--with options
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-shared[=PKGS]  build shared libraries [default=yes]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-gtk-doc        use gtk-doc to build documentation [[default=no]]
+  --enable-gtk-doc-html   build documentation in html format [[default=yes]]
+  --enable-gtk-doc-pdf    build documentation in pdf format [[default=no]]
+  --enable-valgrind-tests run self tests under valgrind
+  --enable-ld-version-script
+                          enable linker version script (default is enabled
+                          when possible)
+  --enable-gcc-warnings   turn on lots of GCC warnings (for developers)
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-pic              try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-html-dir=PATH    path to installed docs
+  --with-packager         String identifying the packager of this software
+  --with-packager-version Packager-specific version information
+  --with-packager-bug-reports
+                          Packager info for bug reports (URL/e-mail/...)
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  YACC        The `Yet Another C Compiler' implementation to use. Defaults to
+              the first program found out of: `bison -y', `byacc', `yacc'.
+  YFLAGS      The list of arguments that will be passed by default to $YACC.
+              This script will default YFLAGS to the empty string to avoid a
+              default value of `-d' given by some make applications.
+  PKG_CONFIG  path to pkg-config utility
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-gnutls@gnu.org>.
+GNU Libtasn1 home page: <http://www.gnu.org/software/libtasn1/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" ||
+      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+      continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+GNU Libtasn1 configure 2.7
+generated by GNU Autoconf 2.65
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } >/dev/null && {
+        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_header_compiler=yes
+else
+  ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  ac_header_preproc=yes
+else
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+  yes:no: )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+    ;;
+  no:yes:* )
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( cat <<\_ASBOX
+## --------------------------------- ##
+## Report this to bug-gnutls@gnu.org ##
+## --------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_c_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_compile
+
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        $as_test_x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_link
+
+# ac_fn_c_check_func LINENO FUNC VAR
+# ----------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_c_check_func ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_func
+
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
+else
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR
+# ------------------------------------
+# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5
+$as_echo_n "checking whether $2 is declared... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $2
+  (void) $2;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof ($2))
+        return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+           return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_type
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GNU Libtasn1 $as_me 2.7, which was
+generated by GNU Autoconf 2.65.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    $as_echo "PATH: $as_dir"
+  done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+    2)
+      as_fn_append ac_configure_args1 " '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      as_fn_append ac_configure_args " '$ac_arg'"
+      ;;
+    esac
+  done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+       "s/'\''/'\''\\\\'\'''\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      $as_echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=\$$ac_var
+       case $ac_val in
+       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       esac
+       $as_echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      $as_echo "$as_me: caught signal $ac_signal"
+    $as_echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+  ac_site_file1=$CONFIG_SITE
+elif test "x$prefix" != xNONE; then
+  ac_site_file1=$prefix/share/config.site
+  ac_site_file2=$prefix/etc/config.site
+else
+  ac_site_file1=$ac_default_prefix/share/config.site
+  ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+  test "x$ac_site_file" = xNONE && continue
+  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special files
+  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+gl_getopt_required=GNU
+as_fn_append ac_header_list " getopt.h"
+as_fn_append ac_header_list " stdarg.h"
+as_fn_append ac_header_list " stddef.h"
+as_fn_append ac_header_list " stdint.h"
+as_fn_append ac_header_list " wchar.h"
+as_fn_append ac_header_list " stdlib.h"
+as_fn_append ac_header_list " unistd.h"
+as_fn_append ac_header_list " string.h"
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       # differences in whitespace do not lead to failure.
+       ac_old_val_w=`echo x $ac_old_val`
+       ac_new_val_w=`echo x $ac_new_val`
+       if test "$ac_old_val_w" != "$ac_new_val_w"; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         ac_cache_corrupted=:
+       else
+         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         eval $ac_var=\$ac_old_val
+       fi
+       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+  for ac_t in install-sh install.sh shtool; do
+    if test -f "$ac_dir/$ac_t"; then
+      ac_aux_dir=$ac_dir
+      ac_install_sh="$ac_aux_dir/$ac_t -c"
+      break 2
+    fi
+  done
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+am__api_version='1.11'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+esac
+
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t "$srcdir/configure" conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      as_fn_error "ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" "$LINENO" 5
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
+  done
+IFS=$as_save_IFS
+
+fi
+
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='libtasn1'
+ VERSION='2.7'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+# Library code modified:                              REVISION++
+# Interfaces changed/added/removed:   CURRENT++       REVISION=0
+# Interfaces added:                             AGE++
+# Interfaces removed:                           AGE=0
+LT_CURRENT=4
+
+LT_REVISION=9
+
+LT_AGE=1
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "no acceptable C compiler found in \$PATH
+See \`config.log' for more details." "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       then :; else
+          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       fi
+       # We set ac_cv_exeext here because the later test for it is not
+       # safe: cross compilers may not add the suffix if given an `-o'
+       # argument, so we may need to know it at that point already.
+       # Even if this section looks crufty: it has the advantage of
+       # actually working.
+       break;;
+    * )
+       break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "C compiler cannot create executables
+See \`config.log' for more details." "$LINENO" 5; }; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." "$LINENO" 5; }
+    fi
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  ac_c_werror_flag=$ac_save_c_werror_flag
+        CFLAGS="-g"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from `make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvisualcpp | msvcmsys)
+      # This compiler won't grok `-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdc=yes
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+                  (('a' <= (c) && (c) <= 'i') \
+                    || ('j' <= (c) && (c) <= 'r') \
+                    || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+       || toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+                 inttypes.h stdint.h unistd.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
+if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+  if test "$MINIX" = yes; then
+
+$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+
+
+$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+
+
+$as_echo "#define _MINIX 1" >>confdefs.h
+
+  fi
+
+        case "$host_os" in
+    hpux*)
+
+$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+      ;;
+  esac
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_safe_to_define___extensions__=yes
+else
+  ac_cv_safe_to_define___extensions__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
+
+  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
+
+  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
+
+
+
+
+
+
+
+
+   case $ac_cv_prog_cc_stdc in #(
+  no) :
+    ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
+$as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
+if test "${ac_cv_prog_cc_c99+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <stdio.h>
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+#define debug(...) fprintf (stderr, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  your preprocessor is broken;
+#endif
+#if BIG_OK
+#else
+  your preprocessor is broken;
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\0'; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static void
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str;
+  int number;
+  float fnumber;
+
+  while (*format)
+    {
+      switch (*format++)
+       {
+       case 's': // string
+         str = va_arg (args_copy, const char *);
+         break;
+       case 'd': // int
+         number = va_arg (args_copy, int);
+         break;
+       case 'f': // float
+         fnumber = va_arg (args_copy, double);
+         break;
+       default:
+         break;
+       }
+    }
+  va_end (args_copy);
+  va_end (args);
+}
+
+int
+main ()
+{
+
+  // Check bool.
+  _Bool success = false;
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  test_varargs ("s, d' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
+         || dynamic_array[ni.number - 1] != 543);
+
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c99" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c99"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+$as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c99" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+else
+  ac_cv_prog_cc_stdc=no
+fi
+
+fi
+ ;;
+esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5
+$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; }
+  if test "${ac_cv_prog_cc_stdc+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+fi
+
+  case $ac_cv_prog_cc_stdc in #(
+  no) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;; #(
+  '') :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;; #(
+  *) :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5
+$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;;
+esac
+
+
+
+  # Code from module arg-nonnull:
+  # Code from module autobuild:
+
+
+
+
+  if test -z "$AB_PACKAGE"; then
+    AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE}
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5
+$as_echo "$as_me: autobuild project... $AB_PACKAGE" >&6;}
+
+  if test -z "$AB_VERSION"; then
+    AB_VERSION=${PACKAGE_VERSION:-$VERSION}
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5
+$as_echo "$as_me: autobuild revision... $AB_VERSION" >&6;}
+
+  hostname=`hostname`
+  if test "$hostname"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5
+$as_echo "$as_me: autobuild hostname... $hostname" >&6;}
+  fi
+
+
+
+  date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ`
+  if test "$?" != 0; then
+    date=`date`
+  fi
+  if test "$date"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5
+$as_echo "$as_me: autobuild timestamp... $date" >&6;}
+  fi
+
+  # Code from module c++defs:
+  # Code from module extensions:
+
+  # Code from module fdl-1.3:
+  # Code from module gendocs:
+  # Code from module getopt-gnu:
+  # Code from module getopt-posix:
+  # Code from module gettext-h:
+  # Code from module gnumakefile:
+  # Code from module include_next:
+  # Code from module maintainer-makefile:
+  # Code from module manywarnings:
+  # Code from module multiarch:
+  # Code from module pmccabe2html:
+  # Code from module progname:
+  # Code from module read-file:
+  # Code from module realloc-posix:
+  # Code from module stdarg:
+
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module stdlib:
+  # Code from module unistd:
+  # Code from module update-copyright:
+  # Code from module useless-if-before-free:
+  # Code from module valgrind-tests:
+  # Code from module vc-list-files:
+  # Code from module version-etc:
+  # Code from module version-etc-fsf:
+  # Code from module warn-on-use:
+  # Code from module warnings:
+  # Code from module wchar:
+
+
+
+  # Code from module arg-nonnull:
+  # Code from module c++defs:
+  # Code from module extensions:
+
+  # Code from module include_next:
+  # Code from module lib-symbol-versions:
+  # Code from module lib-symbol-visibility:
+  # Code from module multiarch:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module string:
+  # Code from module strverscmp:
+  # Code from module warn-on-use:
+  # Code from module wchar:
+
+for ac_prog in 'bison -y' byacc
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_YACC+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_YACC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
+fi
+
+
+
+
+PERL=${PERL-"${am_missing_run}perl"}
+
+
+HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"}
+
+
+enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
+set dummy ${ac_tool_prefix}as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AS"; then
+  ac_cv_prog_AS="$AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AS="${ac_tool_prefix}as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AS=$ac_cv_prog_AS
+if test -n "$AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AS"; then
+  ac_ct_AS=$AS
+  # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AS+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AS"; then
+  ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AS="as"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AS=$ac_cv_prog_ac_ct_AS
+if test -n "$ac_ct_AS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
+$as_echo "$ac_ct_AS" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AS" = x; then
+    AS="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AS=$ac_ct_AS
+  fi
+else
+  AS="$ac_cv_prog_AS"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DLLTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
+  fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
+
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+  ;;
+esac
+
+test -z "$AS" && AS=as
+
+
+
+
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+
+
+
+
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+
+case `pwd` in
+  *\ * | *\    *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
+
+
+
+macro_version='2.2.6b'
+macro_revision='1.3017'
+
+
+
+
+
+
+
+
+
+
+
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+test -z "$GREP" && GREP=grep
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if test "${lt_cv_path_LD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if test "${lt_cv_path_NM+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$DUMPBIN" && break
+  done
+fi
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in "dumpbin -symbols" "link -dump -symbols"
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_DUMPBIN" && break
+done
+
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DUMPBIN=$ac_ct_DUMPBIN
+  fi
+fi
+
+
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if test "${lt_cv_nm_interface+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:6333: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:6336: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:6339: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
+
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+    i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+
+fi
+
+if test -n $lt_cv_sys_max_cmd_len ; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+
+
+
+
+
+
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
+$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
+$as_echo "$xsi_shell" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
+$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
+$as_echo "$lt_shell_append" >&6; }
+
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+
+
+
+
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if test "${lt_cv_ld_reload_flag+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if test "${lt_cv_deplibs_check_method+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
+
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+
+
+
+
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+test -z "$STRIP" && STRIP=:
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+test -z "$RANLIB" && RANLIB=:
+
+
+
+
+
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+         if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&5
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 7530 "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if test "${lt_cv_cc_needs_belf+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_LIPO="lipo"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    LIPO=$ac_ct_LIPO
+  fi
+else
+  LIPO="$ac_cv_prog_LIPO"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
+else
+  OTOOL="$ac_cv_prog_OTOOL"
+fi
+
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&5
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+       LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[012]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
+
+fi
+
+done
+
+
+
+# Set options
+
+
+
+        enable_dlopen=no
+
+
+
+            # Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_shared=yes
+fi
+
+
+
+
+
+
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_static=yes
+fi
+
+
+
+
+
+
+
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; pic_mode="$withval"
+else
+  pic_mode=default
+fi
+
+
+test -z "$pic_mode" && pic_mode=default
+
+
+
+
+
+
+
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac
+else
+  enable_fast_install=yes
+fi
+
+
+
+
+
+
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+test -z "$LN_S" && LN_S="ln -s"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if test "${lt_cv_objdir+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
+_ACEOF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+for cc_temp in $compiler""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+
+lt_save_CC="$CC"
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+
+lt_prog_compiler_no_builtin_flag=
+
+if test "$GCC" = yes; then
+  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:8790: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:8794: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
+
+if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
+else
+    :
+fi
+
+fi
+
+
+
+
+
+
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+
+  if test "$GCC" = yes; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       lt_prog_compiler_static='-Bstatic'
+      else
+       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       lt_prog_compiler_pic='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-KPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='--shared'
+       lt_prog_compiler_static='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fpic'
+       lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-qpic'
+       lt_prog_compiler_static='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         lt_prog_compiler_pic='-KPIC'
+         lt_prog_compiler_static='-Bstatic'
+         lt_prog_compiler_wl=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+       lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       lt_prog_compiler_pic='-Kconform_pic'
+       lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
+$as_echo "$lt_prog_compiler_pic" >&6; }
+
+
+
+
+
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9129: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:9133: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
+
+fi
+
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
+
+if test x"$lt_cv_prog_compiler_static_works" = xyes; then
+    :
+else
+    lt_prog_compiler_static=
+fi
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9234: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9238: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:9289: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:9293: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links="nottested"
+if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test "$hard_links" = no; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_flag_spec_ld=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    link_all_deplibs=no
+    ;;
+  esac
+
+  ld_shlibs=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       allow_undefined_flag=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         whole_archive_flag_spec=
+         tmp_sharedflag='--shared' ;;
+       xl[cC]*)                        # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         compiler_needs_object=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+         hardcode_libdir_flag_spec=
+         hardcode_libdir_flag_spec_ld='-rpath $libdir'
+         archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+       ld_shlibs=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           ld_shlibs=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       ld_shlibs=no
+      fi
+      ;;
+    esac
+
+    if test "$ld_shlibs" = no; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       hardcode_direct=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[012]|aix4.[012].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         hardcode_direct=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         hardcode_minus_L=yes
+         hardcode_libdir_flag_spec='-L$libdir'
+         hardcode_libdir_separator=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+       link_all_deplibs=no
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      export_dynamic_flag_spec='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+         allow_undefined_flag="-z nodefs"
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         no_undefined_flag=' ${wl}-bernotok'
+         allow_undefined_flag=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         whole_archive_flag_spec='$convenience'
+         archive_cmds_need_lc=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      allow_undefined_flag=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      old_archive_from_new_cmds='true'
+      # FIXME: Should let the user specify the lib program.
+      old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      fix_srcfile_path='`cygpath -w "$srcfile"`'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  whole_archive_flag_spec=''
+  link_all_deplibs=yes
+  allow_undefined_flag="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+
+  else
+  ld_shlibs=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_flag_spec_ld='+b $libdir'
+       hardcode_libdir_separator=:
+       hardcode_direct=yes
+       hardcode_direct_absolute=yes
+       export_dynamic_flag_spec='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       hardcode_minus_L=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+       hardcode_libdir_separator=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         hardcode_direct=no
+         hardcode_shlibpath_var=no
+         ;;
+       *)
+         hardcode_direct=yes
+         hardcode_direct_absolute=yes
+         export_dynamic_flag_spec='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         hardcode_minus_L=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo(void) {}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+        LDFLAGS="$save_LDFLAGS"
+      else
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       hardcode_direct=yes
+       hardcode_shlibpath_var=no
+       hardcode_direct_absolute=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+         export_dynamic_flag_spec='${wl}-E'
+       else
+         case $host_os in
+          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            hardcode_libdir_flag_spec='-R$libdir'
+            ;;
+          *)
+            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       ld_shlibs=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+       allow_undefined_flag=' -expect_unresolved \*'
+       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
+
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      link_all_deplibs=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         reload_cmds='$CC -r -o $output$reload_objs'
+         hardcode_direct=no
+        ;;
+       motorola)
+         archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       hardcode_shlibpath_var=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       ld_shlibs=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='${wl}-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='${wl}-z,text'
+      allow_undefined_flag='${wl}-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='${wl}-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
+
+    *)
+      ld_shlibs=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test "$ld_shlibs" = no && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$lt_prog_compiler_wl
+       pic_flag=$lt_prog_compiler_pic
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$allow_undefined_flag
+        allow_undefined_flag=
+        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+        then
+         archive_cmds_need_lc=no
+        else
+         archive_cmds_need_lc=yes
+        fi
+        allow_undefined_flag=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
+$as_echo "$archive_cmds_need_lc" >&6; }
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[123]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[3-9]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+       LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[      ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[89] | openbsd2.[89].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test "X$hardcode_automatic" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
+
+if test "$hardcode_action" = relink ||
+   test "$inherit_rpath" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+  if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+
+fi
+
+    ;;
+
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
+else
+  ac_cv_lib_dld_shl_load=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
+else
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11673 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if test "${lt_cv_dlopen_self_static+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+         if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line 11769 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+  # Report which library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[4-9]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+CC="$lt_save_CC"
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long int" >&5
+$as_echo_n "checking size of unsigned long int... " >&6; }
+if test "${ac_cv_sizeof_unsigned_long_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long int))" "ac_cv_sizeof_unsigned_long_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_long_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (unsigned long int)
+See \`config.log' for more details." "$LINENO" 5; }; }
+   else
+     ac_cv_sizeof_unsigned_long_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG_INT $ac_cv_sizeof_unsigned_long_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
+$as_echo_n "checking size of unsigned int... " >&6; }
+if test "${ac_cv_sizeof_unsigned_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ as_fn_set_status 77
+as_fn_error "cannot compute sizeof (unsigned int)
+See \`config.log' for more details." "$LINENO" 5; }; }
+   else
+     ac_cv_sizeof_unsigned_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
+_ACEOF
+
+
+
+
+  # Update version number in lib/libtasn1.h.
+  if ! sed 's/_VERSION ".*"/_VERSION "'$PACKAGE_VERSION'"/' $srcdir/lib/libtasn1.h > fixhdr.tmp; then
+    as_fn_error "*** Failed to update version number in $srcdir/lib/libtasn1.h..." "$LINENO" 5
+  fi
+  if cmp -s $srcdir/lib/libtasn1.h fixhdr.tmp 2>/dev/null; then
+    rm -f fixhdr.tmp
+  elif ! mv fixhdr.tmp $srcdir/lib/libtasn1.h; then
+    as_fn_error "*** Failed to move fixhdr.tmp to $srcdir/lib/libtasn1.h..." "$LINENO" 5
+  fi
+
+
+# Check for gtk-doc.
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+
+fi
+
+
+    # Extract the first word of "gtkdoc-check", so it can be a program name with args.
+set dummy gtkdoc-check; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_CHECK+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_CHECK in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_CHECK="$GTKDOC_CHECK" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_CHECK="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_CHECK=$ac_cv_path_GTKDOC_CHECK
+if test -n "$GTKDOC_CHECK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_CHECK" >&5
+$as_echo "$GTKDOC_CHECK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  for ac_prog in gtkdoc-rebase
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_REBASE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_REBASE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_REBASE="$GTKDOC_REBASE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_REBASE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_REBASE=$ac_cv_path_GTKDOC_REBASE
+if test -n "$GTKDOC_REBASE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_REBASE" >&5
+$as_echo "$GTKDOC_REBASE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GTKDOC_REBASE" && break
+done
+test -n "$GTKDOC_REBASE" || GTKDOC_REBASE="true"
+
+  # Extract the first word of "gtkdoc-mkpdf", so it can be a program name with args.
+set dummy gtkdoc-mkpdf; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_GTKDOC_MKPDF+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $GTKDOC_MKPDF in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GTKDOC_MKPDF="$GTKDOC_MKPDF" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GTKDOC_MKPDF="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+GTKDOC_MKPDF=$ac_cv_path_GTKDOC_MKPDF
+if test -n "$GTKDOC_MKPDF"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GTKDOC_MKPDF" >&5
+$as_echo "$GTKDOC_MKPDF" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+# Check whether --with-html-dir was given.
+if test "${with_html_dir+set}" = set; then :
+  withval=$with_html_dir;
+else
+  with_html_dir='${datadir}/gtk-doc/html'
+fi
+
+  HTML_DIR="$with_html_dir"
+
+
+    # Check whether --enable-gtk-doc was given.
+if test "${enable_gtk_doc+set}" = set; then :
+  enableval=$enable_gtk_doc;
+else
+  enable_gtk_doc=no
+fi
+
+
+  if test x$enable_gtk_doc = xyes; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.2") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  :
+else
+  as_fn_error "You need to have gtk-doc >= 1.2 installed to build $PACKAGE_NAME" "$LINENO" 5
+fi
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build gtk-doc documentation" >&5
+$as_echo_n "checking whether to build gtk-doc documentation... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_gtk_doc" >&5
+$as_echo "$enable_gtk_doc" >&6; }
+
+    # Check whether --enable-gtk-doc-html was given.
+if test "${enable_gtk_doc_html+set}" = set; then :
+  enableval=$enable_gtk_doc_html;
+else
+  enable_gtk_doc_html=yes
+fi
+
+    # Check whether --enable-gtk-doc-pdf was given.
+if test "${enable_gtk_doc_pdf+set}" = set; then :
+  enableval=$enable_gtk_doc_pdf;
+else
+  enable_gtk_doc_pdf=no
+fi
+
+
+  if test -z "$GTKDOC_MKPDF"; then
+    enable_gtk_doc_pdf=no
+  fi
+
+
+   if test x$enable_gtk_doc = xyes; then
+  ENABLE_GTK_DOC_TRUE=
+  ENABLE_GTK_DOC_FALSE='#'
+else
+  ENABLE_GTK_DOC_TRUE='#'
+  ENABLE_GTK_DOC_FALSE=
+fi
+
+   if test x$enable_gtk_doc_html = xyes; then
+  GTK_DOC_BUILD_HTML_TRUE=
+  GTK_DOC_BUILD_HTML_FALSE='#'
+else
+  GTK_DOC_BUILD_HTML_TRUE='#'
+  GTK_DOC_BUILD_HTML_FALSE=
+fi
+
+   if test x$enable_gtk_doc_pdf = xyes; then
+  GTK_DOC_BUILD_PDF_TRUE=
+  GTK_DOC_BUILD_PDF_FALSE='#'
+else
+  GTK_DOC_BUILD_PDF_TRUE='#'
+  GTK_DOC_BUILD_PDF_FALSE=
+fi
+
+   if test -n "$LIBTOOL"; then
+  GTK_DOC_USE_LIBTOOL_TRUE=
+  GTK_DOC_USE_LIBTOOL_FALSE='#'
+else
+  GTK_DOC_USE_LIBTOOL_TRUE='#'
+  GTK_DOC_USE_LIBTOOL_FALSE=
+fi
+
+   if test -n "$GTKDOC_REBASE"; then
+  GTK_DOC_USE_REBASE_TRUE=
+  GTK_DOC_USE_REBASE_FALSE='#'
+else
+  GTK_DOC_USE_REBASE_TRUE='#'
+  GTK_DOC_USE_REBASE_FALSE=
+fi
+
+
+
+# For gnulib compatibility modules.
+
+
+
+
+          LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+
+
+  GNULIB_CHOWN=0;
+  GNULIB_CLOSE=0;
+  GNULIB_DUP2=0;
+  GNULIB_DUP3=0;
+  GNULIB_ENVIRON=0;
+  GNULIB_EUIDACCESS=0;
+  GNULIB_FACCESSAT=0;
+  GNULIB_FCHDIR=0;
+  GNULIB_FCHOWNAT=0;
+  GNULIB_FSYNC=0;
+  GNULIB_FTRUNCATE=0;
+  GNULIB_GETCWD=0;
+  GNULIB_GETDOMAINNAME=0;
+  GNULIB_GETDTABLESIZE=0;
+  GNULIB_GETGROUPS=0;
+  GNULIB_GETHOSTNAME=0;
+  GNULIB_GETLOGIN=0;
+  GNULIB_GETLOGIN_R=0;
+  GNULIB_GETPAGESIZE=0;
+  GNULIB_GETUSERSHELL=0;
+  GNULIB_LCHOWN=0;
+  GNULIB_LINK=0;
+  GNULIB_LINKAT=0;
+  GNULIB_LSEEK=0;
+  GNULIB_PIPE2=0;
+  GNULIB_PREAD=0;
+  GNULIB_PWRITE=0;
+  GNULIB_READLINK=0;
+  GNULIB_READLINKAT=0;
+  GNULIB_RMDIR=0;
+  GNULIB_SLEEP=0;
+  GNULIB_SYMLINK=0;
+  GNULIB_SYMLINKAT=0;
+  GNULIB_TTYNAME_R=0;
+  GNULIB_UNISTD_H_GETOPT=0;
+  GNULIB_UNISTD_H_SIGPIPE=0;
+  GNULIB_UNLINK=0;
+  GNULIB_UNLINKAT=0;
+  GNULIB_USLEEP=0;
+  GNULIB_WRITE=0;
+    HAVE_CHOWN=1;
+  HAVE_DUP2=1;
+  HAVE_DUP3=1;
+  HAVE_EUIDACCESS=1;
+  HAVE_FACCESSAT=1;
+  HAVE_FCHDIR=1;
+  HAVE_FCHOWNAT=1;
+  HAVE_FSYNC=1;
+  HAVE_FTRUNCATE=1;
+  HAVE_GETDOMAINNAME=1;
+  HAVE_GETDTABLESIZE=1;
+  HAVE_GETGROUPS=1;
+  HAVE_GETHOSTNAME=1;
+  HAVE_GETLOGIN=1;
+  HAVE_GETPAGESIZE=1;
+  HAVE_LCHOWN=1;
+  HAVE_LINK=1;
+  HAVE_LINKAT=1;
+  HAVE_PIPE2=1;
+  HAVE_PREAD=1;
+  HAVE_PWRITE=1;
+  HAVE_READLINK=1;
+  HAVE_READLINKAT=1;
+  HAVE_SLEEP=1;
+  HAVE_SYMLINK=1;
+  HAVE_SYMLINKAT=1;
+  HAVE_TTYNAME_R=1;
+  HAVE_UNLINKAT=1;
+  HAVE_USLEEP=1;
+  HAVE_DECL_ENVIRON=1;
+  HAVE_DECL_GETLOGIN_R=1;
+  HAVE_DECL_GETPAGESIZE=1;
+  HAVE_DECL_GETUSERSHELL=1;
+  HAVE_OS_H=0;
+  HAVE_SYS_PARAM_H=0;
+  REPLACE_CHOWN=0;
+  REPLACE_CLOSE=0;
+  REPLACE_DUP=0;
+  REPLACE_DUP2=0;
+  REPLACE_FCHOWNAT=0;
+  REPLACE_GETCWD=0;
+  REPLACE_GETGROUPS=0;
+  REPLACE_GETPAGESIZE=0;
+  REPLACE_LCHOWN=0;
+  REPLACE_LINK=0;
+  REPLACE_LINKAT=0;
+  REPLACE_LSEEK=0;
+  REPLACE_PREAD=0;
+  REPLACE_PWRITE=0;
+  REPLACE_READLINK=0;
+  REPLACE_RMDIR=0;
+  REPLACE_SLEEP=0;
+  REPLACE_SYMLINK=0;
+  REPLACE_TTYNAME_R=0;
+  REPLACE_UNLINK=0;
+  REPLACE_UNLINKAT=0;
+  REPLACE_USLEEP=0;
+  REPLACE_WRITE=0;
+  UNISTD_H_HAVE_WINSOCK2_H=0;
+  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
+$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
+if test "${gl_cv_have_include_next+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+                                                  cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=yes
+else
+  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=buggy
+else
+  gl_cv_have_include_next=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
+$as_echo "$gl_cv_have_include_next" >&6; }
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+
+
+
+
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_getopt_h='<'getopt.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5
+$as_echo_n "checking absolute name of <getopt.h>... " >&6; }
+if test "${gl_cv_next_getopt_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_getopt_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <getopt.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_getopt_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/getopt.h#{
+                 s#.*"\(.*/getopt.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_getopt_h='<'getopt.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5
+$as_echo "$gl_cv_next_getopt_h" >&6; }
+     fi
+     NEXT_GETOPT_H=$gl_cv_next_getopt_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'getopt.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_getopt_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_getopt_h = yes; then
+    HAVE_GETOPT_H=1
+  else
+    HAVE_GETOPT_H=0
+  fi
+
+
+  gl_replace_getopt=
+
+    if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    for ac_header in getopt.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default"
+if test "x$ac_cv_header_getopt_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETOPT_H 1
+_ACEOF
+
+else
+  gl_replace_getopt=yes
+fi
+
+done
+
+  fi
+
+    if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    for ac_func in getopt_long_only
+do :
+  ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only"
+if test "x$ac_cv_func_getopt_long_only" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GETOPT_LONG_ONLY 1
+_ACEOF
+
+else
+  gl_replace_getopt=yes
+fi
+done
+
+  fi
+
+              if test -z "$gl_replace_getopt"; then
+    ac_fn_c_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include <getopt.h>
+"
+if test "x$ac_cv_have_decl_optreset" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_OPTRESET $ac_have_decl
+_ACEOF
+if test $ac_have_decl = 1; then :
+
+else
+  ac_fn_c_check_decl "$LINENO" "getopt_clip" "ac_cv_have_decl_getopt_clip" "#include <getopt.h>
+"
+if test "x$ac_cv_have_decl_getopt_clip" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETOPT_CLIP $ac_have_decl
+_ACEOF
+
+
+fi
+
+  fi
+
+                    if test -z "$gl_replace_getopt"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5
+$as_echo_n "checking whether getopt is POSIX compatible... " >&6; }
+if test "${gl_cv_func_getopt_posix+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+             mingw*) gl_cv_func_getopt_posix="guessing no";;
+             darwin*) gl_cv_func_getopt_posix="guessing no";;
+             *)      gl_cv_func_getopt_posix="guessing yes";;
+           esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !HAVE_DECL_OPTRESET && !HAVE_DECL_GETOPT_CLIP
+# define OPTIND_MIN 0
+#else
+# define OPTIND_MIN 1
+#endif
+
+int
+main ()
+{
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "-a";
+    argv[argc++] = "foo";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "ab");
+    if (!(c == 'a'))
+      return 1;
+    c = getopt (argc, argv, "ab");
+    if (!(c == -1))
+      return 2;
+    if (!(optind == 2))
+      return 3;
+  }
+  /* Some internal state exists at this point.  */
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "donald";
+    argv[argc++] = "-p";
+    argv[argc++] = "billy";
+    argv[argc++] = "duck";
+    argv[argc++] = "-a";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "+abp:q:");
+    if (!(c == -1))
+      return 4;
+    if (!(strcmp (argv[0], "program") == 0))
+      return 5;
+    if (!(strcmp (argv[1], "donald") == 0))
+      return 6;
+    if (!(strcmp (argv[2], "-p") == 0))
+      return 7;
+    if (!(strcmp (argv[3], "billy") == 0))
+      return 8;
+    if (!(strcmp (argv[4], "duck") == 0))
+      return 9;
+    if (!(strcmp (argv[5], "-a") == 0))
+      return 10;
+    if (!(strcmp (argv[6], "bar") == 0))
+      return 11;
+    if (!(optind == 1))
+      return 12;
+  }
+  /* Detect MacOS 10.5 bug.  */
+  {
+    char *argv[3] = { "program", "-ab", NULL };
+    optind = OPTIND_MIN;
+    opterr = 0;
+    if (getopt (2, argv, "ab:") != 'a')
+      return 13;
+    if (getopt (2, argv, "ab:") != '?')
+      return 14;
+    if (optopt != 'b')
+      return 15;
+    if (optind != 2)
+      return 16;
+  }
+
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_posix=yes
+else
+  gl_cv_func_getopt_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5
+$as_echo "$gl_cv_func_getopt_posix" >&6; }
+    case "$gl_cv_func_getopt_posix" in
+      *no) gl_replace_getopt=yes ;;
+    esac
+  fi
+
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5
+$as_echo_n "checking for working GNU getopt function... " >&6; }
+if test "${gl_cv_func_getopt_gnu+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+       # optstring is necessary for programs like m4 that have POSIX-mandated
+       # semantics for supporting options interspersed with files.
+       # Also, since getopt_long is a GNU extension, we require optind=0.
+       gl_had_POSIXLY_CORRECT=${POSIXLY_CORRECT:+yes}
+       POSIXLY_CORRECT=1
+       export POSIXLY_CORRECT
+       if test "$cross_compiling" = yes; then :
+           case $host_os:$ac_cv_have_decl_optreset in
+           *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;;
+           *:yes)               gl_cv_func_getopt_gnu=no;;
+           *)                   gl_cv_func_getopt_gnu=yes;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <getopt.h>
+                           #include <stddef.h>
+                           #include <string.h>
+
+int
+main ()
+{
+
+             /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+                and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+                OSF/1 5.1, Solaris 10.  */
+             {
+               char *myargv[3];
+               myargv[0] = "conftest";
+               myargv[1] = "-+";
+               myargv[2] = 0;
+               opterr = 0;
+               if (getopt (2, myargv, "+a") != '?')
+                 return 1;
+             }
+             /* This code succeeds on glibc 2.8, mingw,
+                and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+                IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x.  */
+             {
+               char *argv[] = { "program", "-p", "foo", "bar", NULL };
+
+               optind = 1;
+               if (getopt (4, argv, "p::") != 'p')
+                 return 2;
+               if (optarg != NULL)
+                 return 3;
+               if (getopt (4, argv, "p::") != -1)
+                 return 4;
+               if (optind != 2)
+                 return 5;
+             }
+             /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0.  */
+             {
+               char *argv[] = { "program", "foo", "-p", NULL };
+               optind = 0;
+               if (getopt (3, argv, "-p") != 1)
+                 return 6;
+               if (getopt (3, argv, "-p") != 'p')
+                 return 7;
+             }
+             /* This code fails on glibc 2.11.  */
+             {
+               char *argv[] = { "program", "-b", "-a", NULL };
+               optind = opterr = 0;
+               if (getopt (3, argv, "+:a:b") != 'b')
+                 return 8;
+               if (getopt (3, argv, "+:a:b") != ':')
+                 return 9;
+             }
+             return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_getopt_gnu=yes
+else
+  gl_cv_func_getopt_gnu=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+       if test "$gl_had_POSIXLY_CORRECT" != yes; then
+         { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}
+       fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5
+$as_echo "$gl_cv_func_getopt_gnu" >&6; }
+    if test "$gl_cv_func_getopt_gnu" = "no"; then
+      gl_replace_getopt=yes
+    fi
+  fi
+
+ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getenv" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETENV $ac_have_decl
+_ACEOF
+
+
+
+
+
+
+  if test -n "$gl_replace_getopt"; then :
+
+
+
+  GETOPT_H=getopt.h
+
+$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h
+
+
+
+    GNULIB_UNISTD_H_GETOPT=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
+
+
+
+
+fi
+
+
+
+    gl_cv_c_multiarch=no
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+               arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test $gl_cv_c_multiarch = yes; then
+
+$as_echo "#define AA_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5
+$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; }
+if test "${gl_cv_func_malloc_posix+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+         choke me
+         #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_malloc_posix=yes
+else
+  gl_cv_func_malloc_posix=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5
+$as_echo "$gl_cv_func_malloc_posix" >&6; }
+
+
+  GNULIB_ATOLL=0;
+  GNULIB_CALLOC_POSIX=0;
+  GNULIB_CANONICALIZE_FILE_NAME=0;
+  GNULIB_GETLOADAVG=0;
+  GNULIB_GETSUBOPT=0;
+  GNULIB_GRANTPT=0;
+  GNULIB_MALLOC_POSIX=0;
+  GNULIB_MKDTEMP=0;
+  GNULIB_MKOSTEMP=0;
+  GNULIB_MKOSTEMPS=0;
+  GNULIB_MKSTEMP=0;
+  GNULIB_MKSTEMPS=0;
+  GNULIB_PTSNAME=0;
+  GNULIB_PUTENV=0;
+  GNULIB_RANDOM_R=0;
+  GNULIB_REALLOC_POSIX=0;
+  GNULIB_REALPATH=0;
+  GNULIB_RPMATCH=0;
+  GNULIB_SETENV=0;
+  GNULIB_STRTOD=0;
+  GNULIB_STRTOLL=0;
+  GNULIB_STRTOULL=0;
+  GNULIB_UNLOCKPT=0;
+  GNULIB_UNSETENV=0;
+    HAVE_ATOLL=1;
+  HAVE_CALLOC_POSIX=1;
+  HAVE_CANONICALIZE_FILE_NAME=1;
+  HAVE_DECL_GETLOADAVG=1;
+  HAVE_GETSUBOPT=1;
+  HAVE_GRANTPT=1;
+  HAVE_MALLOC_POSIX=1;
+  HAVE_MKDTEMP=1;
+  HAVE_MKOSTEMP=1;
+  HAVE_MKOSTEMPS=1;
+  HAVE_MKSTEMP=1;
+  HAVE_MKSTEMPS=1;
+  HAVE_PTSNAME=1;
+  HAVE_RANDOM_R=1;
+  HAVE_REALLOC_POSIX=1;
+  HAVE_REALPATH=1;
+  HAVE_RPMATCH=1;
+  HAVE_SETENV=1;
+  HAVE_STRTOD=1;
+  HAVE_STRTOLL=1;
+  HAVE_STRTOULL=1;
+  HAVE_STRUCT_RANDOM_DATA=1;
+  HAVE_SYS_LOADAVG_H=0;
+  HAVE_UNLOCKPT=1;
+  HAVE_UNSETENV=1;
+  REPLACE_CANONICALIZE_FILE_NAME=0;
+  REPLACE_MKSTEMP=0;
+  REPLACE_PUTENV=0;
+  REPLACE_REALPATH=0;
+  REPLACE_SETENV=0;
+  REPLACE_STRTOD=0;
+  REPLACE_UNSETENV=0;
+
+
+
+
+    REPLACE_NULL=0;
+  HAVE_WCHAR_T=1;
+  STDDEF_H='';
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wchar_t=yes
+else
+  gt_cv_c_wchar_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+$as_echo "$gt_cv_c_wchar_t" >&6; }
+  if test $gt_cv_c_wchar_t = yes; then
+
+$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
+
+  fi
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if test "${ac_cv_type_long_long_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+                          if test "$cross_compiling" = yes; then :
+  ac_cv_type_long_long_int=yes
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+               #ifndef LLONG_MAX
+               # define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               # define LLONG_MAX (HALF - 1 + HALF)
+               #endif
+int
+main ()
+{
+long long int n = 1;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_type_long_long_int=yes
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_type_unsigned_long_long_int=yes
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if test "${ac_cv_c_inline+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+
+
+  GNULIB_BTOWC=0;
+  GNULIB_WCTOB=0;
+  GNULIB_MBSINIT=0;
+  GNULIB_MBRTOWC=0;
+  GNULIB_MBRLEN=0;
+  GNULIB_MBSRTOWCS=0;
+  GNULIB_MBSNRTOWCS=0;
+  GNULIB_WCRTOMB=0;
+  GNULIB_WCSRTOMBS=0;
+  GNULIB_WCSNRTOMBS=0;
+  GNULIB_WCWIDTH=0;
+    HAVE_BTOWC=1;
+  HAVE_MBSINIT=1;
+  HAVE_MBRTOWC=1;
+  HAVE_MBRLEN=1;
+  HAVE_MBSRTOWCS=1;
+  HAVE_MBSNRTOWCS=1;
+  HAVE_WCRTOMB=1;
+  HAVE_WCSRTOMBS=1;
+  HAVE_WCSNRTOMBS=1;
+  HAVE_DECL_WCTOB=1;
+  HAVE_DECL_WCWIDTH=1;
+  REPLACE_MBSTATE_T=0;
+  REPLACE_BTOWC=0;
+  REPLACE_WCTOB=0;
+  REPLACE_MBSINIT=0;
+  REPLACE_MBRTOWC=0;
+  REPLACE_MBRLEN=0;
+  REPLACE_MBSRTOWCS=0;
+  REPLACE_MBSNRTOWCS=0;
+  REPLACE_WCRTOMB=0;
+  REPLACE_WCSRTOMBS=0;
+  REPLACE_WCSNRTOMBS=0;
+  REPLACE_WCWIDTH=0;
+
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
+$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
+if test "${gl_cv_header_wchar_h_correct_inline+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_wchar_h_correct_inline=yes
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #define wcstod renamed_wcstod
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+
+_ACEOF
+     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #define wcstod renamed_wcstod
+#include <wchar.h>
+int zero (void) { return 0; }
+
+_ACEOF
+       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
+$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    as_fn_error "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." "$LINENO" 5
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
+if test "${gt_cv_c_wint_t+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wint_t=yes
+else
+  gt_cv_c_wint_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+$as_echo "$gt_cv_c_wint_t" >&6; }
+  if test $gt_cv_c_wint_t = yes; then
+
+$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
+
+  fi
+
+
+   if true; then
+  GL_COND_LIBTOOL_TRUE=
+  GL_COND_LIBTOOL_FALSE='#'
+else
+  GL_COND_LIBTOOL_TRUE='#'
+  GL_COND_LIBTOOL_FALSE=
+fi
+
+  gl_cond_libtool=true
+  gl_m4_base='gl/m4'
+
+
+
+
+
+
+
+
+
+  gl_source_base='gl'
+  # Code from module arg-nonnull:
+  # Code from module autobuild:
+  # Code from module c++defs:
+  # Code from module extensions:
+  # Code from module fdl-1.3:
+  # Code from module gendocs:
+  # Code from module getopt-gnu:
+
+
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_GETOPT_GNU 1" >>confdefs.h
+
+
+  # Code from module getopt-posix:
+
+
+
+
+
+  if test -n "$gl_replace_getopt"; then :
+
+
+
+  GETOPT_H=getopt.h
+
+$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h
+
+
+
+    GNULIB_UNISTD_H_GETOPT=1
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext"
+
+
+
+
+
+
+fi
+
+
+  # Code from module gettext-h:
+
+
+  # Code from module gnumakefile:
+  # Autoconf 2.61a.99 and earlier don't support linking a file only
+  # in VPATH builds.  But since GNUmakefile is for maintainer use
+  # only, it does not matter if we skip the link with older autoconf.
+  # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+  # builds, so use a shell variable to bypass this.
+  GNUmakefile=GNUmakefile
+  ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile"
+
+  # Code from module include_next:
+  # Code from module maintainer-makefile:
+
+  # Code from module manywarnings:
+  # Code from module multiarch:
+
+  # Code from module pmccabe2html:
+  # Extract the first word of "pmccabe", so it can be a program name with args.
+set dummy pmccabe; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PMCCABE+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PMCCABE in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PMCCABE="$PMCCABE" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PMCCABE="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PMCCABE" && ac_cv_path_PMCCABE="false"
+  ;;
+esac
+fi
+PMCCABE=$ac_cv_path_PMCCABE
+if test -n "$PMCCABE"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PMCCABE" >&5
+$as_echo "$PMCCABE" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  # Code from module progname:
+  ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h>
+"
+if test "x$ac_cv_have_decl_program_invocation_name" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl
+_ACEOF
+
+  ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h>
+"
+if test "x$ac_cv_have_decl_program_invocation_short_name" = x""yes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl
+_ACEOF
+
+  # Code from module read-file:
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS read-file.$ac_objext"
+
+  :
+
+  # Code from module realloc-posix:
+
+
+  if test $gl_cv_func_malloc_posix = yes; then
+    HAVE_REALLOC_POSIX=1
+
+$as_echo "#define HAVE_REALLOC_POSIX 1" >>confdefs.h
+
+  else
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext"
+
+    HAVE_REALLOC_POSIX=0
+  fi
+
+
+
+
+
+  GNULIB_REALLOC_POSIX=1
+
+
+
+$as_echo "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h
+
+
+
+  # Code from module stdarg:
+
+  STDARG_H='';
+  NEXT_STDARG_H='<stdarg.h>';
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5
+$as_echo_n "checking for va_copy... " >&6; }
+  if test "${gl_cv_func_va_copy+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+int
+main ()
+{
+
+#ifndef va_copy
+void (*func) (va_list, va_list) = va_copy;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_va_copy=yes
+else
+  gl_cv_func_va_copy=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_va_copy" >&5
+$as_echo "$gl_cv_func_va_copy" >&6; }
+  if test $gl_cv_func_va_copy = no; then
+                                    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined _AIX && !defined __GNUC__
+        AIX vaccine
+       #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "vaccine" >/dev/null 2>&1; then :
+  gl_aixcc=yes
+else
+  gl_aixcc=no
+fi
+rm -f conftest*
+
+    if test $gl_aixcc = yes; then
+            STDARG_H=stdarg.h
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdarg_h='<'stdarg.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdarg.h>" >&5
+$as_echo_n "checking absolute name of <stdarg.h>... " >&6; }
+if test "${gl_cv_next_stdarg_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stdarg_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdarg_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdarg.h#{
+                 s#.*"\(.*/stdarg.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdarg_h='<'stdarg.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5
+$as_echo "$gl_cv_next_stdarg_h" >&6; }
+     fi
+     NEXT_STDARG_H=$gl_cv_next_stdarg_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdarg.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdarg_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive
+
+
+
+            if test "$gl_cv_next_stdarg_h" = '""'; then
+        gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
+        NEXT_STDARG_H="$gl_cv_next_stdarg_h"
+      fi
+    else
+
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  if test "${gl_cv_func___va_copy+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+int
+main ()
+{
+
+#ifndef __va_copy
+error, bail out
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func___va_copy=yes
+else
+  gl_cv_func___va_copy=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+  as_echo_n="$saved_as_echo_n"
+
+      if test $gl_cv_func___va_copy = yes; then
+
+$as_echo "#define va_copy __va_copy" >>confdefs.h
+
+      else
+
+
+$as_echo "#define va_copy gl_va_copy" >>confdefs.h
+
+      fi
+    fi
+  fi
+
+  # Code from module stddef:
+
+
+
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
+$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if test "${gl_cv_decl_null_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_decl_null_works=yes
+else
+  gl_cv_decl_null_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
+$as_echo "$gl_cv_decl_null_works" >&6; }
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  if test -n "$STDDEF_H"; then
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stddef_h='<'stddef.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
+$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
+if test "${gl_cv_next_stddef_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stddef_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stddef.h#{
+                 s#.*"\(.*/stddef.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stddef_h='<'stddef.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
+$as_echo "$gl_cv_next_stddef_h" >&6; }
+     fi
+     NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stddef.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stddef_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+  fi
+
+  # Code from module stdint:
+
+
+
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+
+
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+
+
+      if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+
+
+      if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdint_h='<'stdint.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
+if test "${gl_cv_next_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stdint_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdint.h#{
+                 s#.*"\(.*/stdint.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdint_h='<'stdint.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
+     fi
+     NEXT_STDINT_H=$gl_cv_next_stdint_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
+
+
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+
+
+    if test $ac_cv_header_stdint_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
+if test "${gl_cv_header_working_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_working_stdint_h=no
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+                                                    if test "$cross_compiling" = yes; then :
+                 gl_cv_header_working_stdint_h=yes
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_stdint_h=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+            for ac_header in sys/inttypes.h sys/bitypes.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+
+
+
+
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
+if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  result=yes
+else
+  result=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+eval ac_res=\$gl_cv_type_${gltype}_signed
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNED_${GLTYPE} 1
+_ACEOF
+
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+
+
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+
+    STDINT_H=stdint.h
+  fi
+
+
+  # Code from module stdlib:
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdlib_h='<'stdlib.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5
+$as_echo_n "checking absolute name of <stdlib.h>... " >&6; }
+if test "${gl_cv_next_stdlib_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stdlib_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdlib.h#{
+                 s#.*"\(.*/stdlib.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdlib_h='<'stdlib.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5
+$as_echo "$gl_cv_next_stdlib_h" >&6; }
+     fi
+     NEXT_STDLIB_H=$gl_cv_next_stdlib_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdlib.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdlib_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive
+
+
+
+  for ac_header in random.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "random.h" "ac_cv_header_random_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_random_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_RANDOM_H 1
+_ACEOF
+
+fi
+
+done
+
+  if test $ac_cv_header_random_h = yes; then
+    HAVE_RANDOM_H=1
+  else
+    HAVE_RANDOM_H=0
+  fi
+
+  ac_fn_c_check_type "$LINENO" "struct random_data" "ac_cv_type_struct_random_data" "#include <stdlib.h>
+      #if HAVE_RANDOM_H
+      # include <random.h>
+      #endif
+
+"
+if test "x$ac_cv_type_struct_random_data" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_RANDOM_DATA 1
+_ACEOF
+
+
+else
+  HAVE_STRUCT_RANDOM_DATA=0
+fi
+
+
+
+    for gl_func in atoll canonicalize_file_name getloadavg getsubopt grantpt mkdtemp     mkostemp mkostemps mkstemp mkstemps ptsname random_r initstat_r srandom_r     setstate_r realpath rpmatch setenv strtod strtoll strtoull unlockpt     unsetenv; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+  # Code from module unistd:
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_unistd_h='<'unistd.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5
+$as_echo_n "checking absolute name of <unistd.h>... " >&6; }
+if test "${gl_cv_next_unistd_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_unistd_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/unistd.h#{
+                 s#.*"\(.*/unistd.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_unistd_h='<'unistd.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5
+$as_echo "$gl_cv_next_unistd_h" >&6; }
+     fi
+     NEXT_UNISTD_H=$gl_cv_next_unistd_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'unistd.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_unistd_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive
+
+
+
+
+
+  if test $ac_cv_header_unistd_h = yes; then
+    HAVE_UNISTD_H=1
+  else
+    HAVE_UNISTD_H=0
+  fi
+
+
+
+    for gl_func in chown dup2 dup3 environ euidaccess faccessat fchdir fchownat     fsync ftruncate getcwd getdomainname getdtablesize getgroups     gethostname getlogin getlogin_r getpagesize getusershell setusershell     endusershell lchown link linkat lseek pipe2 pread pwrite readlink     readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat     usleep; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <unistd.h>
+/* Some systems declare various items in the wrong headers.  */
+#ifndef __GLIBC__
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+  # Code from module update-copyright:
+  # Code from module useless-if-before-free:
+  # Code from module valgrind-tests:
+
+  # Check whether --enable-valgrind-tests was given.
+if test "${enable_valgrind_tests+set}" = set; then :
+  enableval=$enable_valgrind_tests; opt_valgrind_tests=$enableval
+else
+  opt_valgrind_tests=yes
+fi
+
+
+  # Run self-tests under valgrind?
+  if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then
+    for ac_prog in valgrind
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_VALGRIND+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$VALGRIND"; then
+  ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_VALGRIND="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+VALGRIND=$ac_cv_prog_VALGRIND
+if test -n "$VALGRIND"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5
+$as_echo "$VALGRIND" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$VALGRIND" && break
+done
+
+  fi
+
+  if test -n "$VALGRIND" && $VALGRIND -q true > /dev/null 2>&1; then
+    opt_valgrind_tests=yes
+    VALGRIND="$VALGRIND -q"
+  else
+    opt_valgrind_tests=no
+    VALGRIND=
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether self tests are run under valgrind" >&5
+$as_echo_n "checking whether self tests are run under valgrind... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $opt_valgrind_tests" >&5
+$as_echo "$opt_valgrind_tests" >&6; }
+
+  # Code from module vc-list-files:
+  # Code from module version-etc:
+
+# Check whether --with-packager was given.
+if test "${with_packager+set}" = set; then :
+  withval=$with_packager;       case $withval in
+        yes|no) ;;
+        *)
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_PACKAGER "$withval"
+_ACEOF
+ ;;
+      esac
+
+fi
+
+
+
+# Check whether --with-packager-version was given.
+if test "${with_packager_version+set}" = set; then :
+  withval=$with_packager_version;       case $withval in
+        yes|no) ;;
+        *)
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_PACKAGER_VERSION "$withval"
+_ACEOF
+ ;;
+      esac
+
+fi
+
+
+
+# Check whether --with-packager-bug-reports was given.
+if test "${with_packager_bug_reports+set}" = set; then :
+  withval=$with_packager_bug_reports;       case $withval in
+        yes|no) ;;
+        *)
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_PACKAGER_BUG_REPORTS "$withval"
+_ACEOF
+ ;;
+      esac
+
+fi
+
+
+  if test "X$with_packager" = "X" && \
+     test "X$with_packager_version$with_packager_bug_reports" != "X"
+  then
+    as_fn_error "The --with-packager-{bug-reports,version} options require --with-packager" "$LINENO" 5
+  fi
+
+  # Code from module version-etc-fsf:
+  # Code from module warn-on-use:
+  # Code from module warnings:
+
+  # Code from module wchar:
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wchar_h='<'wchar.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if test "${gl_cv_next_wchar_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_wchar_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wchar.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/wchar.h#{
+                 s#.*"\(.*/wchar.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_wchar_h='<'wchar.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+     fi
+     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wchar.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wchar_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb     wcsrtombs wcsnrtombs wcwidth; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Some systems require additional headers.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+  # End of code from modules
+
+
+
+
+
+
+
+
+
+  gltests_libdeps=
+  gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+
+  gl_source_base='tests'
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+
+  gl_module_indicator_condition=$gltests_WITNESS
+
+
+  # Check whether --enable-valgrind-tests was given.
+if test "${enable_valgrind_tests+set}" = set; then :
+  enableval=$enable_valgrind_tests; opt_valgrind_tests=$enableval
+else
+  opt_valgrind_tests=yes
+fi
+
+
+  # Run self-tests under valgrind?
+  if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then
+    for ac_prog in valgrind
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_VALGRIND+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$VALGRIND"; then
+  ac_cv_prog_VALGRIND="$VALGRIND" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_VALGRIND="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+VALGRIND=$ac_cv_prog_VALGRIND
+if test -n "$VALGRIND"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VALGRIND" >&5
+$as_echo "$VALGRIND" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$VALGRIND" && break
+done
+
+  fi
+
+  if test -n "$VALGRIND" && $VALGRIND -q true > /dev/null 2>&1; then
+    opt_valgrind_tests=yes
+    VALGRIND="$VALGRIND -q"
+  else
+    opt_valgrind_tests=no
+    VALGRIND=
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether self tests are run under valgrind" >&5
+$as_echo_n "checking whether self tests are run under valgrind... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $opt_valgrind_tests" >&5
+$as_echo "$opt_valgrind_tests" >&6; }
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if test "${ac_cv_c_restrict+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int * int_ptr;
+       int foo (int_ptr $ac_kw ip) {
+       return ip[0];
+       }
+int
+main ()
+{
+int s[1];
+       int * $ac_kw t = s;
+       t[0] = 0;
+       return foo(t)
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     test "$ac_cv_c_restrict" != no && break
+   done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+
+  GNULIB_MEMCHR=0;
+  GNULIB_MEMMEM=0;
+  GNULIB_MEMPCPY=0;
+  GNULIB_MEMRCHR=0;
+  GNULIB_RAWMEMCHR=0;
+  GNULIB_STPCPY=0;
+  GNULIB_STPNCPY=0;
+  GNULIB_STRCHRNUL=0;
+  GNULIB_STRDUP=0;
+  GNULIB_STRNCAT=0;
+  GNULIB_STRNDUP=0;
+  GNULIB_STRNLEN=0;
+  GNULIB_STRPBRK=0;
+  GNULIB_STRSEP=0;
+  GNULIB_STRSTR=0;
+  GNULIB_STRCASESTR=0;
+  GNULIB_STRTOK_R=0;
+  GNULIB_MBSLEN=0;
+  GNULIB_MBSNLEN=0;
+  GNULIB_MBSCHR=0;
+  GNULIB_MBSRCHR=0;
+  GNULIB_MBSSTR=0;
+  GNULIB_MBSCASECMP=0;
+  GNULIB_MBSNCASECMP=0;
+  GNULIB_MBSPCASECMP=0;
+  GNULIB_MBSCASESTR=0;
+  GNULIB_MBSCSPN=0;
+  GNULIB_MBSPBRK=0;
+  GNULIB_MBSSPN=0;
+  GNULIB_MBSSEP=0;
+  GNULIB_MBSTOK_R=0;
+  GNULIB_STRERROR=0;
+  GNULIB_STRSIGNAL=0;
+  GNULIB_STRVERSCMP=0;
+  HAVE_MBSLEN=0;
+    HAVE_MEMCHR=1;
+  HAVE_DECL_MEMMEM=1;
+  HAVE_MEMPCPY=1;
+  HAVE_DECL_MEMRCHR=1;
+  HAVE_RAWMEMCHR=1;
+  HAVE_STPCPY=1;
+  HAVE_STPNCPY=1;
+  HAVE_STRCHRNUL=1;
+  HAVE_DECL_STRDUP=1;
+  HAVE_DECL_STRNDUP=1;
+  HAVE_DECL_STRNLEN=1;
+  HAVE_STRPBRK=1;
+  HAVE_STRSEP=1;
+  HAVE_STRCASESTR=1;
+  HAVE_DECL_STRTOK_R=1;
+  HAVE_DECL_STRSIGNAL=1;
+  HAVE_STRVERSCMP=1;
+  REPLACE_MEMCHR=0;
+  REPLACE_MEMMEM=0;
+  REPLACE_STPNCPY=0;
+  REPLACE_STRDUP=0;
+  REPLACE_STRSTR=0;
+  REPLACE_STRCASESTR=0;
+  REPLACE_STRERROR=0;
+  REPLACE_STRNCAT=0;
+  REPLACE_STRNDUP=0;
+  REPLACE_STRNLEN=0;
+  REPLACE_STRSIGNAL=0;
+  REPLACE_STRTOK_R=0;
+  UNDEFINE_STRTOK_R=0;
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_string_h='<'string.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5
+$as_echo_n "checking absolute name of <string.h>... " >&6; }
+if test "${gl_cv_next_string_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_string_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/string.h#{
+                 s#.*"\(.*/string.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_string_h='<'string.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5
+$as_echo "$gl_cv_next_string_h" >&6; }
+     fi
+     NEXT_STRING_H=$gl_cv_next_string_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'string.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_string_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
+
+
+
+
+
+    for gl_func in memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup      strncat strndup strnlen strpbrk strsep strcasestr strtok_r strsignal      strverscmp; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+
+   if true; then
+  GL_COND_LIBTOOL_TRUE=
+  GL_COND_LIBTOOL_FALSE='#'
+else
+  GL_COND_LIBTOOL_TRUE='#'
+  GL_COND_LIBTOOL_FALSE=
+fi
+
+  gl_cond_libtool=true
+  gl_m4_base='lib/glm4'
+
+
+
+
+
+
+
+
+
+  gl_source_base='lib/gllib'
+  # Code from module arg-nonnull:
+  # Code from module c++defs:
+  # Code from module extensions:
+  # Code from module include_next:
+  # Code from module lib-symbol-versions:
+
+  # Check whether --enable-ld-version-script was given.
+if test "${enable_ld_version_script+set}" = set; then :
+  enableval=$enable_ld_version_script; have_ld_version_script=$enableval
+fi
+
+  if test -z "$have_ld_version_script"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if LD -Wl,--version-script works" >&5
+$as_echo_n "checking if LD -Wl,--version-script works... " >&6; }
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+    cat > conftest.map <<EOF
+VERS_1 {
+        global: sym;
+};
+
+VERS_2 {
+        global: sym;
+} VERS_1;
+EOF
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  have_ld_version_script=yes
+else
+  have_ld_version_script=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    rm -f conftest.map
+    LDFLAGS="$save_LDFLAGS"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_ld_version_script" >&5
+$as_echo "$have_ld_version_script" >&6; }
+  fi
+   if test "$have_ld_version_script" = "yes"; then
+  HAVE_LD_VERSION_SCRIPT_TRUE=
+  HAVE_LD_VERSION_SCRIPT_FALSE='#'
+else
+  HAVE_LD_VERSION_SCRIPT_TRUE='#'
+  HAVE_LD_VERSION_SCRIPT_FALSE=
+fi
+
+
+  # Code from module lib-symbol-visibility:
+
+
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
+$as_echo_n "checking whether the -Werror option is usable... " >&6; }
+    if test "${gl_cv_cc_vis_werror+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -Werror"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_cc_vis_werror=yes
+else
+  gl_cv_cc_vis_werror=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS="$gl_save_CFLAGS"
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
+$as_echo "$gl_cv_cc_vis_werror" >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
+$as_echo_n "checking for simple visibility declarations... " >&6; }
+    if test "${gl_cv_cc_visibility+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+                                    if test $gl_cv_cc_vis_werror = yes; then
+        CFLAGS="$CFLAGS -Werror"
+      fi
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+         extern __attribute__((__visibility__("default"))) int exportedvar;
+         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+         extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+         void dummyfunc (void) {}
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_cc_visibility=yes
+else
+  gl_cv_cc_visibility=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS="$gl_save_CFLAGS"
+fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
+$as_echo "$gl_cv_cc_visibility" >&6; }
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VISIBILITY $HAVE_VISIBILITY
+_ACEOF
+
+
+  # Code from module multiarch:
+
+  # Code from module stddef:
+
+
+
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
+$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if test "${gl_cv_decl_null_works+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_decl_null_works=yes
+else
+  gl_cv_decl_null_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
+$as_echo "$gl_cv_decl_null_works" >&6; }
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  if test -n "$STDDEF_H"; then
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stddef_h='<'stddef.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
+$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
+if test "${gl_cv_next_stddef_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stddef_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stddef.h#{
+                 s#.*"\(.*/stddef.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stddef_h='<'stddef.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
+$as_echo "$gl_cv_next_stddef_h" >&6; }
+     fi
+     NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stddef.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stddef_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+  fi
+
+  # Code from module stdint:
+
+
+
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+
+
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+
+
+      if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+
+
+      if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdint_h='<'stdint.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
+if test "${gl_cv_next_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_stdint_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/stdint.h#{
+                 s#.*"\(.*/stdint.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_stdint_h='<'stdint.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
+     fi
+     NEXT_STDINT_H=$gl_cv_next_stdint_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
+
+
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+
+
+    if test $ac_cv_header_stdint_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
+if test "${gl_cv_header_working_stdint_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_working_stdint_h=no
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+                                                    if test "$cross_compiling" = yes; then :
+                 gl_cv_header_working_stdint_h=yes
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_stdint_h=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+            for ac_header in sys/inttypes.h sys/bitypes.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+eval as_val=\$$as_ac_Header
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+
+
+
+
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
+if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  result=yes
+else
+  result=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+eval ac_res=\$gl_cv_type_${gltype}_signed
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNED_${GLTYPE} 1
+_ACEOF
+
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+
+
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+
+    STDINT_H=stdint.h
+  fi
+
+
+  # Code from module string:
+
+
+
+  # Code from module strverscmp:
+
+
+
+
+
+
+
+
+
+
+
+
+  for ac_func in strverscmp
+do :
+  ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp"
+if test "x$ac_cv_func_strverscmp" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STRVERSCMP 1
+_ACEOF
+
+else
+
+    lgl_LIBOBJS="$lgl_LIBOBJS $ac_func.$ac_objext"
+
+fi
+done
+
+
+  if test $ac_cv_func_strverscmp = no; then
+
+  :
+
+    HAVE_STRVERSCMP=0
+  fi
+
+
+
+
+  GNULIB_STRVERSCMP=1
+
+
+
+$as_echo "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h
+
+
+
+  # Code from module warn-on-use:
+  # Code from module wchar:
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wchar_h='<'wchar.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if test "${gl_cv_next_wchar_h+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test $ac_cv_header_wchar_h = yes; then
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wchar.h>
+
+_ACEOF
+                                                                                                case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+                                                gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+               sed -n '\#/wchar.h#{
+                 s#.*"\(.*/wchar.h\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'
+          else
+            gl_cv_next_wchar_h='<'wchar.h'>'
+          fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+     fi
+     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wchar.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wchar_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb     wcsrtombs wcsnrtombs wcwidth; do
+    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
+$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
+if { as_var=$as_gl_Symbol; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Some systems require additional headers.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+
+int
+main ()
+{
+#undef $gl_func
+  (void) $gl_func;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$as_gl_Symbol=yes"
+else
+  eval "$as_gl_Symbol=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$as_gl_Symbol
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+     eval as_val=\$$as_gl_Symbol
+   if test "x$as_val" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
+_ACEOF
+
+                     eval ac_cv_have_decl_$gl_func=yes
+fi
+      done
+
+
+  # Code from module dummy:
+  # End of code from modules
+
+
+
+
+
+
+
+
+
+  gltests_libdeps=
+  gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+
+  gl_source_base='tests'
+  lgltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+
+  gl_module_indicator_condition=$lgltests_WITNESS
+
+
+
+
+
+
+
+
+
+
+
+# Check whether --enable-gcc-warnings was given.
+if test "${enable_gcc_warnings+set}" = set; then :
+  enableval=$enable_gcc_warnings; case $enableval in
+     yes|no) ;;
+     *)      as_fn_error "bad value $enableval for gcc-warnings option" "$LINENO" 5 ;;
+   esac
+   gl_gcc_warnings=$enableval
+else
+  gl_gcc_warnings=no
+
+fi
+
+
+if test "$gl_gcc_warnings" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Werror" >&5
+$as_echo_n "checking whether compiler handles -Werror... " >&6; }
+if test "${gl_cv_warn__Werror+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -Werror"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__Werror=yes
+else
+  gl_cv_warn__Werror=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Werror" >&5
+$as_echo "$gl_cv_warn__Werror" >&6; }
+if test "x$gl_cv_warn__Werror" = x""yes; then :
+  as_fn_append WERROR_CFLAGS " -Werror"
+fi
+
+
+  nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
+  nw="$nw -Wc++-compat"             # We don't care strongly about C++ compilers
+  nw="$nw -Wtraditional"            # Warns on #elif which we use often
+  nw="$nw -Wtraditional-conversion" # Too many warnings for now
+  nw="$nw -Wconversion"             # Too many warnings for now
+  nw="$nw -Wsign-conversion"        # Too many warnings for now
+  nw="$nw -Wold-style-definition"   #
+  nw="$nw -Wpadded"                 # Our structs are not padded
+  nw="$nw -Wundef"                  #
+  nw="$nw -Wunreachable-code"       # Too many false positives
+  nw="$nw -Wunused-macros"          # Breaks on bison generated ASN1.c
+  nw="$nw -Wunsafe-loop-optimizations"
+  nw="$nw -Wstrict-overflow"
+
+
+ gl_manywarn_set=
+ for gl_manywarn_item in \
+   -Wall \
+   -W \
+   -Wformat-y2k \
+   -Wformat-nonliteral \
+   -Wformat-security \
+   -Winit-self \
+   -Wmissing-include-dirs \
+   -Wswitch-default \
+   -Wswitch-enum \
+   -Wunused \
+   -Wunknown-pragmas \
+   -Wstrict-aliasing \
+   -Wstrict-overflow \
+   -Wsystem-headers \
+   -Wfloat-equal \
+   -Wtraditional \
+   -Wtraditional-conversion \
+   -Wdeclaration-after-statement \
+   -Wundef \
+   -Wshadow \
+   -Wunsafe-loop-optimizations \
+   -Wpointer-arith \
+   -Wbad-function-cast \
+   -Wc++-compat \
+   -Wcast-qual \
+   -Wcast-align \
+   -Wwrite-strings \
+   -Wconversion \
+   -Wsign-conversion \
+   -Wlogical-op \
+   -Waggregate-return \
+   -Wstrict-prototypes \
+   -Wold-style-definition \
+   -Wmissing-prototypes \
+   -Wmissing-declarations \
+   -Wmissing-noreturn \
+   -Wmissing-format-attribute \
+   -Wpacked \
+   -Wpadded \
+   -Wredundant-decls \
+   -Wnested-externs \
+   -Wunreachable-code \
+   -Winline \
+   -Winvalid-pch \
+   -Wlong-long \
+   -Wvla \
+   -Wvolatile-register-var \
+   -Wdisabled-optimization \
+   -Wstack-protector \
+   -Woverlength-strings \
+   -Wbuiltin-macro-redefined \
+   -Wmudflap \
+   -Wpacked-bitfield-compat \
+   -Wsync-nand \
+  ; do
+    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
+  done
+ # The following are not documented in the manual but are included in
+ # output from gcc --help=warnings.
+ for gl_manywarn_item in \
+   -Wattributes \
+   -Wcoverage-mismatch \
+   -Wmultichar \
+   -Wunused-macros \
+  ; do
+    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
+  done
+  ws=$gl_manywarn_set
+
+
+  gl_warn_set=
+  set x $ws; shift
+  for gl_warn_item
+  do
+    case " $nw " in
+      *" $gl_warn_item "*)
+        ;;
+      *)
+        gl_warn_set="$gl_warn_set $gl_warn_item"
+        ;;
+    esac
+  done
+  ws=$gl_warn_set
+
+  for w in $ws; do
+    as_gl_Warn=`$as_echo "gl_cv_warn_$w" | $as_tr_sh`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles $w" >&5
+$as_echo_n "checking whether compiler handles $w... " >&6; }
+if { as_var=$as_gl_Warn; eval "test \"\${$as_var+set}\" = set"; }; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} $w"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  eval "$as_gl_Warn=yes"
+else
+  eval "$as_gl_Warn=no"
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+eval ac_res=\$$as_gl_Warn
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+eval as_val=\$$as_gl_Warn
+   if test "x$as_val" = x""yes; then :
+  as_fn_append WARN_CFLAGS " $w"
+fi
+
+  done
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-missing-field-initializers" >&5
+$as_echo_n "checking whether compiler handles -Wno-missing-field-initializers... " >&6; }
+if test "${gl_cv_warn__Wno_missing_field_initializers+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -Wno-missing-field-initializers"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__Wno_missing_field_initializers=yes
+else
+  gl_cv_warn__Wno_missing_field_initializers=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_missing_field_initializers" >&5
+$as_echo "$gl_cv_warn__Wno_missing_field_initializers" >&6; }
+if test "x$gl_cv_warn__Wno_missing_field_initializers" = x""yes; then :
+  as_fn_append WARN_CFLAGS " -Wno-missing-field-initializers"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-sign-compare" >&5
+$as_echo_n "checking whether compiler handles -Wno-sign-compare... " >&6; }
+if test "${gl_cv_warn__Wno_sign_compare+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -Wno-sign-compare"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__Wno_sign_compare=yes
+else
+  gl_cv_warn__Wno_sign_compare=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_sign_compare" >&5
+$as_echo "$gl_cv_warn__Wno_sign_compare" >&6; }
+if test "x$gl_cv_warn__Wno_sign_compare" = x""yes; then :
+  as_fn_append WARN_CFLAGS " -Wno-sign-compare"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-pointer-sign" >&5
+$as_echo_n "checking whether compiler handles -Wno-pointer-sign... " >&6; }
+if test "${gl_cv_warn__Wno_pointer_sign+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -Wno-pointer-sign"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__Wno_pointer_sign=yes
+else
+  gl_cv_warn__Wno_pointer_sign=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_pointer_sign" >&5
+$as_echo "$gl_cv_warn__Wno_pointer_sign" >&6; }
+if test "x$gl_cv_warn__Wno_pointer_sign" = x""yes; then :
+  as_fn_append WARN_CFLAGS " -Wno-pointer-sign"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-unused-parameter" >&5
+$as_echo_n "checking whether compiler handles -Wno-unused-parameter... " >&6; }
+if test "${gl_cv_warn__Wno_unused_parameter+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -Wno-unused-parameter"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__Wno_unused_parameter=yes
+else
+  gl_cv_warn__Wno_unused_parameter=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_unused_parameter" >&5
+$as_echo "$gl_cv_warn__Wno_unused_parameter" >&6; }
+if test "x$gl_cv_warn__Wno_unused_parameter" = x""yes; then :
+  as_fn_append WARN_CFLAGS " -Wno-unused-parameter"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -Wno-stack-protector" >&5
+$as_echo_n "checking whether compiler handles -Wno-stack-protector... " >&6; }
+if test "${gl_cv_warn__Wno_stack_protector+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -Wno-stack-protector"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__Wno_stack_protector=yes
+else
+  gl_cv_warn__Wno_stack_protector=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__Wno_stack_protector" >&5
+$as_echo "$gl_cv_warn__Wno_stack_protector" >&6; }
+if test "x$gl_cv_warn__Wno_stack_protector" = x""yes; then :
+  as_fn_append WARN_CFLAGS " -Wno-stack-protector"
+fi
+            # Some functions cannot be protected
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler handles -fdiagnostics-show-option" >&5
+$as_echo_n "checking whether compiler handles -fdiagnostics-show-option... " >&6; }
+if test "${gl_cv_warn__fdiagnostics_show_option+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} -fdiagnostics-show-option"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  gl_cv_warn__fdiagnostics_show_option=yes
+else
+  gl_cv_warn__fdiagnostics_show_option=no
+fi
+rm -f conftest.err conftest.$ac_ext
+  CPPFLAGS="$save_CPPFLAGS"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn__fdiagnostics_show_option" >&5
+$as_echo "$gl_cv_warn__fdiagnostics_show_option" >&6; }
+if test "x$gl_cv_warn__fdiagnostics_show_option" = x""yes; then :
+  as_fn_append WARN_CFLAGS " -fdiagnostics-show-option"
+fi
+
+fi
+
+ac_config_files="$ac_config_files Makefile doc/Makefile doc/cyclo/Makefile doc/reference/Makefile examples/Makefile gl/Makefile lib/Makefile lib/gllib/Makefile lib/libtasn1.pc src/Makefile tests/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_GTK_DOC_TRUE}" && test -z "${ENABLE_GTK_DOC_FALSE}"; then
+  as_fn_error "conditional \"ENABLE_GTK_DOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_BUILD_HTML_TRUE}" && test -z "${GTK_DOC_BUILD_HTML_FALSE}"; then
+  as_fn_error "conditional \"GTK_DOC_BUILD_HTML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_BUILD_PDF_TRUE}" && test -z "${GTK_DOC_BUILD_PDF_FALSE}"; then
+  as_fn_error "conditional \"GTK_DOC_BUILD_PDF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE}"; then
+  as_fn_error "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then
+  as_fn_error "conditional \"GTK_DOC_USE_REBASE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+  as_fn_error "conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+CONFIG_INCLUDE=config.h
+
+
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    gl_LIBOBJS=$gl_libobjs
+
+    gl_LTLIBOBJS=$gl_ltlibobjs
+
+
+
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    gltests_LIBOBJS=$gltests_libobjs
+
+    gltests_LTLIBOBJS=$gltests_ltlibobjs
+
+
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+  as_fn_error "conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_LD_VERSION_SCRIPT_TRUE}" && test -z "${HAVE_LD_VERSION_SCRIPT_FALSE}"; then
+  as_fn_error "conditional \"HAVE_LD_VERSION_SCRIPT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+    lgl_libobjs=
+    lgl_ltlibobjs=
+    if test -n "$lgl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $lgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        lgl_libobjs="$lgl_libobjs $i.$ac_objext"
+        lgl_ltlibobjs="$lgl_ltlibobjs $i.lo"
+      done
+    fi
+    lgl_LIBOBJS=$lgl_libobjs
+
+    lgl_LTLIBOBJS=$lgl_ltlibobjs
+
+
+
+    lgltests_libobjs=
+    lgltests_ltlibobjs=
+    if test -n "$lgltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $lgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        lgltests_libobjs="$lgltests_libobjs $i.$ac_objext"
+        lgltests_ltlibobjs="$lgltests_ltlibobjs $i.lo"
+      done
+    fi
+    lgltests_LIBOBJS=$lgltests_libobjs
+
+    lgltests_LTLIBOBJS=$lgltests_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""       $as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='        ';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -p'
+  fi
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in #(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GNU Libtasn1 $as_me 2.7, which was
+generated by GNU Autoconf 2.65.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-gnutls@gnu.org>.
+GNU Libtasn1 home page: <http://www.gnu.org/software/libtasn1/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+GNU Libtasn1 config.status 2.7
+configured by $0, generated by GNU Autoconf 2.65,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2009 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
+macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
+enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
+host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
+host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
+host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
+build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
+build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
+build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
+SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
+Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
+GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
+EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
+FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
+LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
+NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
+LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
+exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
+AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
+compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
+GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
+SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
+ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
+need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
+LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
+libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
+fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
+need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
+version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
+striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+deplibs_check_method \
+file_magic_cmd \
+AR \
+AR_FLAGS \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+SHELL \
+ECHO \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_wl \
+lt_prog_compiler_pic \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_flag_spec_ld \
+hardcode_libdir_separator \
+fix_srcfile_path \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+finish_eval \
+old_striplib \
+striplib; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+sys_lib_dlsearch_path_spec; do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\$0 --fallback-echo"')  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
+  ;;
+esac
+
+ac_aux_dir='$ac_aux_dir'
+xsi_shell='$xsi_shell'
+lt_shell_append='$lt_shell_append'
+
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+GNUmakefile=$GNUmakefile
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/cyclo/Makefile") CONFIG_FILES="$CONFIG_FILES doc/cyclo/Makefile" ;;
+    "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "gl/Makefile") CONFIG_FILES="$CONFIG_FILES gl/Makefile" ;;
+    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
+    "lib/gllib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gllib/Makefile" ;;
+    "lib/libtasn1.pc") CONFIG_FILES="$CONFIG_FILES lib/libtasn1.pc" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+
+  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = "\a"
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[    ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[      ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_t"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[    ]*#[    ]*define[       ][      ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = "\a"
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS  :L $CONFIG_LINKS  :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+        # (if the path is not absolute).  The absolute path cannot be DOS-style,
+        # because $ac_f cannot contain `:'.
+        test -f "$ac_f" ||
+          case $ac_f in
+          [\\/$]*) false;;
+          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+          esac ||
+          as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+       `' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out" && rm -f "$tmp/out";;
+  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+    } >"$tmp/config.h" \
+      || as_fn_error "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$tmp/config.h" "$ac_file" \
+       || as_fn_error "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+  :L)
+  #
+  # CONFIG_LINK
+  #
+
+  if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+    :
+  else
+    # Prefer the file from the source tree if names are identical.
+    if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+      ac_source=$srcdir/$ac_source
+    fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
+
+    if test ! -r "$ac_source"; then
+      as_fn_error "$ac_source: file not found" "$LINENO" 5
+    fi
+    rm -f "$ac_file"
+
+    # Try a relative symlink, then a hard link, then a copy.
+    case $srcdir in
+    [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+       *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+    esac
+    ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+      ln "$ac_source" "$ac_file" 2>/dev/null ||
+      cp -p "$ac_source" "$ac_file" ||
+      as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+  fi
+ ;;
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Autoconf 2.62 quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named `Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running `make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # When using ansi2knr, U may be empty or an underscore; expand it
+    U=`sed -n 's/^U = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+
+# The names of the tagged configurations supported by this script.
+available_tags=""
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Assembler program.
+AS=$AS
+
+# DLL creation program.
+DLLTOOL=$DLLTOOL
+
+# Object dumper program.
+OBJDUMP=$OBJDUMP
+
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# What type of objects to build.
+pic_mode=$pic_mode
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
+
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
+
+# A sed program that does not truncate output.
+SED=$lt_SED
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
+
+# A grep program that handles long lines.
+GREP=$lt_GREP
+
+# An ERE matcher.
+EGREP=$lt_EGREP
+
+# A literal string matcher.
+FGREP=$lt_FGREP
+
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
+
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
+
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
+
+# Object file suffix (normally "o").
+objext=$ac_objext
+
+# Executable file suffix (normally "").
+exeext=$exeext
+
+# whether the shell understands "unset".
+lt_unset=$lt_unset
+
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
+
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# A symbol stripping program.
+STRIP=$lt_STRIP
+
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# A C compiler.
+LTCC=$lt_CC
+
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
+
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# An echo program that does not interpret backslashes.
+ECHO=$lt_ECHO
+
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
+
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
+
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
+
+# A language specific compiler.
+CC=$lt_compiler
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# If ld is used when linking, flag to hardcode \$libdir into a binary
+# during linking.  This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path=$lt_fix_srcfile_path
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+
+ltmain="$ac_aux_dir/ltmain.sh"
+
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $* ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[^=]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$@"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1+=\$2"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$1=\$$1\$2"
+}
+
+_LT_EOF
+    ;;
+  esac
+
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+
+ ;;
+
+  esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || as_fn_exit $?
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: summary of build options:
+
+  version:          ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE
+  Host type:        ${host}
+  Install prefix:   ${prefix}
+  Compiler:         ${CC}
+  Warning flags:    errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS}
+  Library types:    Shared=${enable_shared}, Static=${enable_static}
+  Valgrind:         ${VALGRIND}
+  Version script:   $have_ld_version_script
+" >&5
+$as_echo "$as_me: summary of build options:
+
+  version:          ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE
+  Host type:        ${host}
+  Install prefix:   ${prefix}
+  Compiler:         ${CC}
+  Warning flags:    errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS}
+  Library types:    Shared=${enable_shared}, Static=${enable_static}
+  Valgrind:         ${VALGRIND}
+  Version script:   $have_ld_version_script
+" >&6;}
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..10bb9fc
--- /dev/null
@@ -0,0 +1,128 @@
+dnl Process this file with autoconf to produce a configure script.
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+AC_PREREQ(2.61)
+AC_INIT([GNU Libtasn1], [2.7], [bug-gnutls@gnu.org])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS(config.h)
+AM_INIT_AUTOMAKE([1.10 -Wall -Werror -Wno-override])
+
+# Library code modified:                              REVISION++
+# Interfaces changed/added/removed:   CURRENT++       REVISION=0
+# Interfaces added:                             AGE++
+# Interfaces removed:                           AGE=0
+AC_SUBST(LT_CURRENT, 4)
+AC_SUBST(LT_REVISION, 9)
+AC_SUBST(LT_AGE, 1)
+
+AC_PROG_CC
+gl_EARLY
+lgl_EARLY
+AC_PROG_YACC
+AC_PROG_LN_S
+
+dnl Checks for programs.
+AC_PROG_INSTALL
+AM_MISSING_PROG(PERL, perl, $missing_dir)
+AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir)
+
+AC_LIBTOOL_WIN32_DLL
+AM_PROG_LIBTOOL
+
+AC_CHECK_SIZEOF(unsigned long int, 4)
+AC_CHECK_SIZEOF(unsigned int, 4)
+
+sj_UPDATE_HEADER_VERSION([$srcdir/lib/libtasn1.h])
+
+# Check for gtk-doc.
+GTK_DOC_CHECK(1.2)
+
+# For gnulib compatibility modules.
+gl_INIT
+lgl_INIT
+
+AC_ARG_ENABLE([gcc-warnings],
+  [AS_HELP_STRING([--enable-gcc-warnings],
+                 [turn on lots of GCC warnings (for developers)])],
+  [case $enableval in
+     yes|no) ;;
+     *)      AC_MSG_ERROR([bad value $enableval for gcc-warnings option]) ;;
+   esac
+   gl_gcc_warnings=$enableval],
+  [gl_gcc_warnings=no]
+)
+
+if test "$gl_gcc_warnings" = yes; then
+  gl_WARN_ADD([-Werror], [WERROR_CFLAGS])
+
+  nw="$nw -Wsystem-headers"         # Don't let system headers trigger warnings
+  nw="$nw -Wc++-compat"             # We don't care strongly about C++ compilers
+  nw="$nw -Wtraditional"            # Warns on #elif which we use often
+  nw="$nw -Wtraditional-conversion" # Too many warnings for now
+  nw="$nw -Wconversion"             # Too many warnings for now
+  nw="$nw -Wsign-conversion"        # Too many warnings for now
+  nw="$nw -Wold-style-definition"   #
+  nw="$nw -Wpadded"                 # Our structs are not padded
+  nw="$nw -Wundef"                  #
+  nw="$nw -Wunreachable-code"       # Too many false positives
+  nw="$nw -Wunused-macros"          # Breaks on bison generated ASN1.c
+  nw="$nw -Wunsafe-loop-optimizations"
+  nw="$nw -Wstrict-overflow"
+
+  gl_MANYWARN_ALL_GCC([ws])
+  gl_MANYWARN_COMPLEMENT(ws, [$ws], [$nw])
+  for w in $ws; do
+    gl_WARN_ADD([$w])
+  done
+
+  gl_WARN_ADD([-Wno-missing-field-initializers])
+  gl_WARN_ADD([-Wno-sign-compare])
+  gl_WARN_ADD([-Wno-pointer-sign])
+  gl_WARN_ADD([-Wno-unused-parameter])
+  gl_WARN_ADD([-Wno-stack-protector])            # Some functions cannot be protected
+  gl_WARN_ADD([-fdiagnostics-show-option])
+fi
+
+AC_CONFIG_FILES([
+  Makefile
+  doc/Makefile
+  doc/cyclo/Makefile
+  doc/reference/Makefile
+  examples/Makefile
+  gl/Makefile
+  lib/Makefile
+  lib/gllib/Makefile
+  lib/libtasn1.pc
+  src/Makefile
+  tests/Makefile
+])
+AC_OUTPUT
+
+AC_MSG_NOTICE([summary of build options:
+
+  version:          ${VERSION} shared $LT_CURRENT:$LT_REVISION:$LT_AGE
+  Host type:        ${host}
+  Install prefix:   ${prefix}
+  Compiler:         ${CC}
+  Warning flags:    errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS}
+  Library types:    Shared=${enable_shared}, Static=${enable_static}
+  Valgrind:         ${VALGRIND}
+  Version script:   $have_ld_version_script
+])
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644 (file)
index 0000000..b508c8c
--- /dev/null
@@ -0,0 +1,185 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+SUBDIRS = cyclo
+if ENABLE_GTK_DOC
+SUBDIRS += reference
+endif
+
+EXTRA_DIST = gdoc TODO libtasn1.html libtasn1.ps libtasn1.pdf
+
+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
+
+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)
+
+gdoc_MANS =
+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_bit_der.3
+gdoc_MANS += man/asn1_der_decoding.3
+gdoc_MANS += man/asn1_der_decoding_element.3
+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_perror.3
+gdoc_MANS += man/asn1_strerror.3
+gdoc_MANS += man/libtasn1_perror.3
+gdoc_MANS += man/libtasn1_strerror.3
+gdoc_MANS += man/asn1_find_node.3
+gdoc_MANS += man/asn1_length_der.3
+gdoc_MANS += man/asn1_octet_der.3
+gdoc_MANS += man/asn1_bit_der.3
+gdoc_MANS += man/asn1_der_coding.3
+gdoc_MANS += man/asn1_write_value.3
+gdoc_MANS += man/asn1_read_value.3
+gdoc_MANS += man/asn1_read_tag.3
+gdoc_MANS += man/asn1_array2tree.3
+gdoc_MANS += man/asn1_delete_structure.3
+gdoc_MANS += man/asn1_delete_element.3
+gdoc_MANS += man/asn1_create_element.3
+gdoc_MANS += man/asn1_print_structure.3
+gdoc_MANS += man/asn1_number_of_elements.3
+gdoc_MANS += man/asn1_find_structure_from_oid.3
+gdoc_MANS += man/asn1_copy_node.3
+gdoc_MANS += man/asn1_parser2tree.3
+gdoc_MANS += man/asn1_parser2array.3
+gdoc_MANS += man/asn1_check_version.3
+gdoc_TEXINFOS =
+gdoc_TEXINFOS += texi/decoding.c.texi
+gdoc_TEXINFOS += texi/errors.c.texi
+gdoc_TEXINFOS += texi/parser_aux.c.texi
+gdoc_TEXINFOS += texi/coding.c.texi
+gdoc_TEXINFOS += texi/element.c.texi
+gdoc_TEXINFOS += texi/gstr.c.texi
+gdoc_TEXINFOS += texi/structure.c.texi
+gdoc_TEXINFOS += texi/ASN1.c.texi
+gdoc_TEXINFOS += texi/version.c.texi
+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_bit_der.texi
+gdoc_TEXINFOS += texi/asn1_der_decoding.texi
+gdoc_TEXINFOS += texi/asn1_der_decoding_element.texi
+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_perror.texi
+gdoc_TEXINFOS += texi/asn1_strerror.texi
+gdoc_TEXINFOS += texi/libtasn1_perror.texi
+gdoc_TEXINFOS += texi/libtasn1_strerror.texi
+gdoc_TEXINFOS += texi/asn1_find_node.texi
+gdoc_TEXINFOS += texi/asn1_length_der.texi
+gdoc_TEXINFOS += texi/asn1_octet_der.texi
+gdoc_TEXINFOS += texi/asn1_bit_der.texi
+gdoc_TEXINFOS += texi/asn1_der_coding.texi
+gdoc_TEXINFOS += texi/asn1_write_value.texi
+gdoc_TEXINFOS += texi/asn1_read_value.texi
+gdoc_TEXINFOS += texi/asn1_read_tag.texi
+gdoc_TEXINFOS += texi/asn1_array2tree.texi
+gdoc_TEXINFOS += texi/asn1_delete_structure.texi
+gdoc_TEXINFOS += texi/asn1_delete_element.texi
+gdoc_TEXINFOS += texi/asn1_create_element.texi
+gdoc_TEXINFOS += texi/asn1_print_structure.texi
+gdoc_TEXINFOS += texi/asn1_number_of_elements.texi
+gdoc_TEXINFOS += texi/asn1_find_structure_from_oid.texi
+gdoc_TEXINFOS += texi/asn1_copy_node.texi
+gdoc_TEXINFOS += texi/asn1_parser2tree.texi
+gdoc_TEXINFOS += texi/asn1_parser2array.texi
+gdoc_TEXINFOS += texi/asn1_check_version.texi
+
+$(gdoc_MANS) $(gdoc_TEXINFOS):
+       make update-makefile
+       make Makefile
+       make doit
+
+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_builddir)/lib/ASN1.c        \
+       $(top_builddir)/lib/version.c
+
+update-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,;" \
+               > foo; \
+       mv foo Makefile.am
+
+doit:
+       $(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, 2007, 2008, 2009, 2010 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
+
+.PHONY: update-makefile doit
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644 (file)
index 0000000..a8177e9
--- /dev/null
@@ -0,0 +1,1448 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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
+DIST_COMMON = $(dist_man_MANS) $(libtasn1_TEXINFOS) \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/stamp-vti $(srcdir)/version.texi TODO
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+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 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 uninstall-recursive
+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'
+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=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = cyclo reference
+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@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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
+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_bit_der.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_perror.3 \
+       man/asn1_strerror.3 man/libtasn1_perror.3 \
+       man/libtasn1_strerror.3 man/asn1_find_node.3 \
+       man/asn1_length_der.3 man/asn1_octet_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_tag.3 \
+       man/asn1_array2tree.3 man/asn1_delete_structure.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_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_bit_der.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_perror.texi \
+       texi/asn1_strerror.texi texi/libtasn1_perror.texi \
+       texi/libtasn1_strerror.texi texi/asn1_find_node.texi \
+       texi/asn1_length_der.texi texi/asn1_octet_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_tag.texi texi/asn1_array2tree.texi \
+       texi/asn1_delete_structure.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_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_builddir)/lib/ASN1.c        \
+       $(top_builddir)/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
+.PRECIOUS: 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:
+       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:
+       TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+       MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+       $(TEXI2DVI) $<
+
+.texi.pdf:
+       TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+       MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+       $(TEXI2PDF) $<
+
+.texi.html:
+       rm -rf $(@:.html=.htp)
+       if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+        -o $(@:.html=.htp) $<; \
+       then \
+         rm -rf $@; \
+         if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+           mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+       else \
+         if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+           rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+         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)
+       -@rm -f vti.tmp
+       @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+       -rm -f vti.tmp
+
+maintainer-clean-vti:
+       -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+.dvi.ps:
+       TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+       $(DVIPS) -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)' && \
+           (install-info --version && \
+            install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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.aux libtasn1.cp libtasn1.cps libtasn1.fn libtasn1.fns \
+         libtasn1.ky libtasn1.kys libtasn1.log libtasn1.pg \
+         libtasn1.tmp libtasn1.toc libtasn1.tp libtasn1.vr \
+         libtasn1.vrs
+
+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)
+       test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+       @list=''; test -n "$(man1dir)" || exit 0; \
+       { 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'; \
+       } | 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,.,'`; \
+       test -z "$$files" || { \
+         echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+         cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+install-man3: $(dist_man_MANS)
+       @$(NORMAL_INSTALL)
+       test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)"
+       @list=''; test -n "$(man3dir)" || exit 0; \
+       { 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'; \
+       } | 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,.,'`; \
+       test -z "$$files" || { \
+         echo " ( cd '$(DESTDIR)$(man3dir)' && rm -f" $$files ")"; \
+         cd "$(DESTDIR)$(man3dir)" && rm -f $$files; }
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       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; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       @list='$(MANS)'; if test -n "$$list"; then \
+         list=`for p in $$list; do \
+           if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+           if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+         if test -n "$$list" && \
+           grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
+           echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+           grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/         /' >&2; \
+           echo "       to fix them, install help2man, remove and regenerate the man pages;" >&2; \
+           echo "       typically \`make maintainer-clean' will remove them" >&2; \
+           exit 1; \
+         else :; fi; \
+       else :; fi
+       @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 \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 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)
+       test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
+       @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+       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)
+       test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
+       @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+       for p in $$list; do \
+         if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         $(am__strip_dir) \
+         if test -d "$$d$$p"; then \
+           echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+           echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+           $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+         else \
+           list2="$$list2 $$d$$p"; \
+         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)
+       test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
+       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+       list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+       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 (install-info --version && \
+            install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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)
+       test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
+       @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+       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)
+       test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
+       @list='$(PSS)'; test -n "$(psdir)" || list=; \
+       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: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+       install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-aminfo clean-generic \
+       clean-libtool ctags ctags-recursive 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-recursive uninstall uninstall-am \
+       uninstall-dvi-am uninstall-html-am uninstall-info-am \
+       uninstall-man uninstall-man1 uninstall-man3 uninstall-pdf-am \
+       uninstall-ps-am
+
+
+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)
+
+$(gdoc_MANS) $(gdoc_TEXINFOS):
+       make update-makefile
+       make Makefile
+       make doit
+
+update-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,;" \
+               > foo; \
+       mv foo Makefile.am
+
+doit:
+       $(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, 2007, 2008, 2009, 2010 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
+
+.PHONY: update-makefile doit
+
+# 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/TODO b/doc/TODO
new file mode 100644 (file)
index 0000000..f2815c8
--- /dev/null
+++ b/doc/TODO
@@ -0,0 +1,20 @@
+If you want to contribute (implement something from the current list, or
+anything), contact the developer's mailing list ...,
+in order to avoid having people working on the same thing.
+
+Current list:
++ Audit the code
++ C structure generation instead of a single array
+- Add the checking of default value (e.g. 'INTEGER DEFAULT v1')
+- Check _asn1_objectid_der, crashes on "0" input, gives incorrect encoding?
+
+(+) Means high priority
+(*) Means medium priority
+(-) Means low priority (ie. nobody is interested to develop that)
+
+----------------------------------------------------------------------
+Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+              2009, 2010 Free Software Foundation, Inc.
+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.
diff --git a/doc/asn1Coding.1 b/doc/asn1Coding.1
new file mode 100644 (file)
index 0000000..d5d0875
--- /dev/null
@@ -0,0 +1,50 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.38.2.
+.TH ASN1CODING "1" "May 2010" "asn1Coding (libtasn1) 2.7" "User Commands"
+.SH NAME
+asn1Coding \- ASN.1 DER encoder
+.SH SYNOPSIS
+.B asn1Coding
+[\fIOPTION\fR] \fIDEFINITIONS 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=\fIFILE\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: bug\-gnutls@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 2010 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 (file)
index 0000000..5a3ab93
--- /dev/null
@@ -0,0 +1,45 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.38.2.
+.TH ASN1DECODING "1" "May 2010" "asn1Decoding (libtasn1) 2.7" "User Commands"
+.SH NAME
+asn1Decoding \- ASN.1 DER decoder
+.SH SYNOPSIS
+.B asn1Decoding
+[\fIOPTION\fR] \fIDEFINITIONS 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\-c\fR, \fB\-\-check\fR
+checks the syntax only
+.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: bug\-gnutls@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 2010 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 (file)
index 0000000..8cc50d5
--- /dev/null
@@ -0,0 +1,53 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.38.2.
+.TH ASN1PARSER "1" "May 2010" "asn1Parser (libtasn1) 2.7" "User Commands"
+.SH NAME
+asn1Parser \- ASN.1 syntax tree generator for libtasn1
+.SH SYNOPSIS
+.B asn1Parser
+[\fIOPTION\fR] \fIFILE\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=\fIFILE\fR
+output file
+.TP
+\fB\-n\fR, \fB\-\-name\fR=\fINAME\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: bug\-gnutls@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 2010 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.am b/doc/cyclo/Makefile.am
new file mode 100644 (file)
index 0000000..9cb9915
--- /dev/null
@@ -0,0 +1,31 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+EXTRA_DIST = cyclo-libtasn1.html
+
+cyclo-libtasn1.html:
+       $(PMCCABE) ${top_srcdir}/lib/*.[ch] \
+               | sort -nr \
+               | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
+                       -v lang=html -v name="$(PACKAGE_NAME)" \
+                       -v vcurl="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=%FILENAME%;hb=HEAD" \
+                       -v url="http://www.gnu.org/software/libtasn1/" \
+                       -v css=../../build-aux/pmccabe.css \
+                       > tmp
+       mv tmp $@
diff --git a/doc/cyclo/Makefile.in b/doc/cyclo/Makefile.in
new file mode 100644 (file)
index 0000000..1283016
--- /dev/null
@@ -0,0 +1,746 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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-libtasn1.html
+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
+.PRECIOUS: 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
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 \
+       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 uninstall uninstall-am
+
+
+cyclo-libtasn1.html:
+       $(PMCCABE) ${top_srcdir}/lib/*.[ch] \
+               | sort -nr \
+               | $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
+                       -v lang=html -v name="$(PACKAGE_NAME)" \
+                       -v vcurl="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=%FILENAME%;hb=HEAD" \
+                       -v url="http://www.gnu.org/software/libtasn1/" \
+                       -v css=../../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 (file)
index 0000000..c8d31d3
--- /dev/null
@@ -0,0 +1,9101 @@
+<!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 1274360673 -->
+<head>
+<title>Cyclomatic Complexity report for GNU Libtasn1</title>
+
+<meta name="description" content="Cyclomatic Complexity report for GNU Libtasn1">
+<meta name="keywords" content="Cyclomatic Complexity report for GNU Libtasn1">
+<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 = "&uarr;";                    } else {                                capa.style.display = "none";                                button.innerHTML = "&darr;";                        }               }       }}
+</script>
+<style type ="text/css" media="screen">
+<!--
+body {
+
+    font-family: Helvetica, sans-serif;
+
+}
+
+.page_title {
+
+    font: 18pt Georgia, serif;
+/*    font-size: 1.5em;
+    font-weight: bold; */
+    color: darkred;
+    border-bottom: 2px solid darkred;
+}
+
+.section_title {
+
+    font: 14pt Georgia, serif;
+    color: darkred;
+    border-bottom: 2px dashed 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;
+}
+
+.sidemenu {
+    
+    border: 1px black solid;
+    padding: 5px;
+
+}
+
+.sidemenuheader {
+    color: darkred;
+    font-size: 1.1em;
+    font-weight: bold;
+    border-bottom: 1px dashed darkred;
+}
+
+.sidemenuentry {
+
+
+}
+
+.menu {
+
+}
+
+-->
+</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 Homepage</a><br/><br/>
+<div class="page_title">GNU Libtasn1 Cyclomatic Complexity Report</div>
+<p>Report generated at: <span class="report_timestamp">Thu May 20 15:04:33 CEST 2010</div></p>
+<div class="section_title">Resume</div>
+<br/>
+<table class="resume_table">
+<tr>
+<td class="resume_header_entry">
+Total number of functions
+</td>
+<td class="resume_number_entry">
+98
+</td>
+</tr>
+<tr>
+<td class="resume_header_entry">
+Number of low risk functions
+</td>
+<td class="resume_number_entry">
+64
+</td>
+</tr>
+<tr>
+<td class="resume_header_entry">
+Number of moderate risk functions
+</td>
+<td class="resume_number_entry">
+17
+</td>
+</tr>
+<tr>
+<td class="resume_header_entry">
+Number of high risk functions
+</td>
+<td class="resume_number_entry">
+10
+</td>
+</tr>
+<tr>
+<td class="resume_header_entry">
+Number of untestable functions
+</td>
+<td class="resume_number_entry">
+7
+</td>
+</tr>
+</table>
+<br/>
+<div class="section_title">Details for all functions</div>
+<p>Used ranges:</p>
+<table class="ranges_table">
+<tr>
+<td class="ranges_header_entry">
+&nbsp;
+</td>
+<td class="ranges_header_entry">
+Cyclomatic Complexity
+</td>
+<td class="ranges_header_entry">
+Risk Evaluation
+</td>
+</tr>
+<tr>
+<td class="ranges_entry_simple">
+&nbsp;
+</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">
+&nbsp;
+</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">
+&nbsp;
+</td>
+<td class="ranges_entry">
+21 - 50
+</td>
+<td class="ranges_entry">
+Complex module, high risk
+</td>
+</tr>
+<tr>
+<td class="ranges_entry_untestable">
+&nbsp;
+</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">
+Cyclomatic
+<br/>
+Complexity
+</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>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_der_decoding_element_src', 'asn1_der_decoding_element_button')"><span id="asn1_der_decoding_element_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_der_decoding_element
+</td>
+<td class="function_entry_cyclo">
+155
+</td>
+<td class="function_entry_number">
+401
+</td>
+<td class="function_entry_number">
+744
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_der_decoding_element_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_der_decoding_element (ASN1_TYPE * structure, const char *elementName,
+                          const void *ider, int len, char *errorDescription)
+{
+  ASN1_TYPE node, p, p2, p3, nodeFound = ASN1_TYPE_EMPTY;
+  char temp[128], currentName[ASN1_MAX_NAME_SIZE * 10], *dot_p, *char_p;
+  int nameLen = ASN1_MAX_NAME_SIZE * 10 - 1, state;
+  int counter, len2, len3, len4, move, ris, tlen;
+  unsigned char class, *temp2;
+  unsigned long tag;
+  int indefinite, result;
+  const unsigned char *der = ider;
+
+  node = *structure;
+
+  if (node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (elementName == NULL)
+    {
+      asn1_delete_structure (structure);
+      return ASN1_ELEMENT_NOT_FOUND;
+    }
+
+  if (node->type &amp; CONST_OPTION)
+    {
+      asn1_delete_structure (structure);
+      return ASN1_GENERIC_ERROR;
+    }
+
+  if ((*structure)->name)
+    {                          /* Has *structure got a name? */
+      nameLen -= strlen ((*structure)->name);
+      if (nameLen > 0)
+       strcpy (currentName, (*structure)->name);
+      else
+       {
+         asn1_delete_structure (structure);
+         return ASN1_MEM_ERROR;
+       }
+      if (!(strcmp (currentName, elementName)))
+       {
+         state = FOUND;
+         nodeFound = *structure;
+       }
+      else if (!memcmp (currentName, elementName, strlen (currentName)))
+       state = SAME_BRANCH;
+      else
+       state = OTHER_BRANCH;
+    }
+  else
+    {                          /* *structure doesn't have a name? */
+      currentName[0] = 0;
+      if (elementName[0] == 0)
+       {
+         state = FOUND;
+         nodeFound = *structure;
+       }
+      else
+       {
+         state = SAME_BRANCH;
+       }
+    }
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+
+      ris = ASN1_SUCCESS;
+
+      if (move != UP)
+       {
+         if (p->type &amp; CONST_SET)
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter == len2)
+               {
+                 p = p2;
+                 move = UP;
+                 continue;
+               }
+             else if (counter > len2)
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+             p2 = p2->down;
+             while (p2)
+               {
+                 if ((p2->type &amp; CONST_SET) && (p2->type & CONST_NOT_USED))
+                   {
+                     if (type_field (p2->type) != TYPE_CHOICE)
+                       ris =
+                         _asn1_extract_tag_der (p2, der + counter,
+                                                len - counter, &amp;len2);
+                     else
+                       {
+                         p3 = p2->down;
+                         while (p3)
+                           {
+                             ris =
+                               _asn1_extract_tag_der (p3, der + counter,
+                                                      len - counter, &amp;len2);
+                             if (ris == ASN1_SUCCESS)
+                               break;
+                             p3 = p3->right;
+                           }
+                       }
+                     if (ris == ASN1_SUCCESS)
+                       {
+                         p2->type &amp;= ~CONST_NOT_USED;
+                         p = p2;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+           }
+
+         if ((p->type &amp; CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter == len2)
+               {
+                 if (p->right)
+                   {
+                     p2 = p->right;
+                     move = RIGHT;
+                   }
+                 else
+                   move = UP;
+
+                 if (p->type &amp; CONST_OPTION)
+                   asn1_delete_structure (&amp;p);
+
+                 p = p2;
+                 continue;
+               }
+           }
+
+         if (type_field (p->type) == TYPE_CHOICE)
+           {
+             while (p->down)
+               {
+                 if (counter < len)
+                   ris =
+                     _asn1_extract_tag_der (p->down, der + counter,
+                                            len - counter, &amp;len2);
+                 else
+                   ris = ASN1_DER_ERROR;
+                 if (ris == ASN1_SUCCESS)
+                   {
+                     while (p->down->right)
+                       {
+                         p2 = p->down->right;
+                         asn1_delete_structure (&amp;p2);
+                       }
+                     break;
+                   }
+                 else if (ris == ASN1_ERROR_TYPE_ANY)
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_ERROR_TYPE_ANY;
+                   }
+                 else
+                   {
+                     p2 = p->down;
+                     asn1_delete_structure (&amp;p2);
+                   }
+               }
+
+             if (p->down == NULL)
+               {
+                 if (!(p->type &amp; CONST_OPTION))
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_DER_ERROR;
+                   }
+               }
+             else
+               p = p->down;
+           }
+
+         if ((p->type &amp; CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter > len2)
+               ris = ASN1_TAG_ERROR;
+           }
+
+         if (ris == ASN1_SUCCESS)
+           ris =
+             _asn1_extract_tag_der (p, der + counter, len - counter, &amp;len2);
+         if (ris != ASN1_SUCCESS)
+           {
+             if (p->type &amp; CONST_OPTION)
+               {
+                 p->type |= CONST_NOT_USED;
+                 move = RIGHT;
+               }
+             else if (p->type &amp; CONST_DEFAULT)
+               {
+                 _asn1_set_value (p, NULL, 0);
+                 move = RIGHT;
+               }
+             else
+               {
+                 if (errorDescription != NULL)
+                   _asn1_error_description_tag_error (p, errorDescription);
+
+                 asn1_delete_structure (structure);
+                 return ASN1_TAG_ERROR;
+               }
+           }
+         else
+           counter += len2;
+       }
+
+      if (ris == ASN1_SUCCESS)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_NULL:
+             if (der[counter])
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+
+             if (p == nodeFound)
+               state = EXIT;
+
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_BOOLEAN:
+             if (der[counter++] != 1)
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+
+             if (state == FOUND)
+               {
+                 if (der[counter++] == 0)
+                   _asn1_set_value (p, "F", 1);
+                 else
+                   _asn1_set_value (p, "T", 1);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+
+               }
+             else
+               counter++;
+
+             move = RIGHT;
+             break;
+           case TYPE_INTEGER:
+           case TYPE_ENUMERATED:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (state == FOUND)
+               {
+                 if (len3 + len2 > len - counter)
+                   return ASN1_DER_ERROR;
+                 _asn1_set_value (p, der + counter, len3 + len2);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_OBJECT_ID:
+             if (state == FOUND)
+               {
+                 result =
+                   _asn1_get_objectid_der (der + counter, len - counter,
+                                           &amp;len2, temp, sizeof (temp));
+                 if (result != ASN1_SUCCESS)
+                   {
+                     return result;
+                   }
+
+                 tlen = strlen (temp);
+
+                 if (tlen > 0)
+                   _asn1_set_value (p, temp, tlen + 1);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               {
+                 len2 =
+                   asn1_get_length_der (der + counter, len - counter, &amp;len3);
+                 if (len2 < 0)
+                   return ASN1_DER_ERROR;
+                 len2 += len3;
+               }
+
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_TIME:
+             if (state == FOUND)
+               {
+                 result =
+                   _asn1_get_time_der (der + counter, len - counter, &amp;len2,
+                                       temp, sizeof (temp) - 1);
+                 if (result != ASN1_SUCCESS)
+                   {
+                     asn1_delete_structure (structure);
+                     return result;
+                   }
+
+                 tlen = strlen (temp);
+                 if (tlen > 0)
+                   _asn1_set_value (p, temp, tlen + 1);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               {
+                 len2 =
+                   asn1_get_length_der (der + counter, len - counter, &amp;len3);
+                 if (len2 < 0)
+                   return ASN1_DER_ERROR;
+                 len2 += len3;
+               }
+
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_OCTET_STRING:
+             len3 = len - counter;
+             if (state == FOUND)
+               {
+                 ris = _asn1_get_octet_string (der + counter, p, &amp;len3);
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               ris = _asn1_get_octet_string (der + counter, NULL, &amp;len3);
+
+             if (ris != ASN1_SUCCESS)
+               return ris;
+             counter += len3;
+             move = RIGHT;
+             break;
+           case TYPE_GENERALSTRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (state == FOUND)
+               {
+                 if (len3 + len2 > len - counter)
+                   return ASN1_DER_ERROR;
+                 _asn1_set_value (p, der + counter, len3 + len2);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_BIT_STRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (state == FOUND)
+               {
+                 if (len3 + len2 > len - counter)
+                   return ASN1_DER_ERROR;
+                 _asn1_set_value (p, der + counter, len3 + len2);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_SEQUENCE:
+           case TYPE_SET:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 _asn1_set_value (p, NULL, 0);
+                 if (len2 == -1)
+                   {           /* indefinite length method */
+                     if ((der[counter]) || der[counter + 1])
+                       {
+                         asn1_delete_structure (structure);
+                         return ASN1_DER_ERROR;
+                       }
+                     counter += 2;
+                   }
+                 else
+                   {           /* definite length method */
+                     if (len2 != counter)
+                       {
+                         asn1_delete_structure (structure);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+                 if (p == nodeFound)
+                   state = EXIT;
+                 move = RIGHT;
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 if (state == OTHER_BRANCH)
+                   {
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &amp;len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2 + len3;
+                     move = RIGHT;
+                   }
+                 else
+                   {           /*  state==SAME_BRANCH or state==FOUND */
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &amp;len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2;
+                     if (len3 > 0)
+                       {
+                         _asn1_ltostr (counter + len3, temp);
+                         tlen = strlen (temp);
+
+                         if (tlen > 0)
+                           _asn1_set_value (p, temp, tlen + 1);
+                         move = DOWN;
+                       }
+                     else if (len3 == 0)
+                       {
+                         p2 = p->down;
+                         while (p2)
+                           {
+                             if (type_field (p2->type) != TYPE_TAG)
+                               {
+                                 p3 = p2->right;
+                                 asn1_delete_structure (&amp;p2);
+                                 p2 = p3;
+                               }
+                             else
+                               p2 = p2->right;
+                           }
+                         move = RIGHT;
+                       }
+                     else
+                       {       /* indefinite length method */
+                         _asn1_set_value (p, "-1", 3);
+                         move = DOWN;
+                       }
+                   }
+               }
+             break;
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SET_OF:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 if (len2 > counter)
+                   {
+                     _asn1_append_sequence_set (p);
+                     p = p->down;
+                     while (p->right)
+                       p = p->right;
+                     move = RIGHT;
+                     continue;
+                   }
+                 _asn1_set_value (p, NULL, 0);
+                 if (len2 != counter)
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_DER_ERROR;
+                   }
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 if (state == OTHER_BRANCH)
+                   {
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &amp;len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2 + len3;
+                     move = RIGHT;
+                   }
+                 else
+                   {           /* state==FOUND or state==SAME_BRANCH */
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &amp;len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2;
+                     if (len3)
+                       {
+                         _asn1_ltostr (counter + len3, temp);
+                         tlen = strlen (temp);
+
+                         if (tlen > 0)
+                           _asn1_set_value (p, temp, tlen + 1);
+                         p2 = p->down;
+                         while ((type_field (p2->type) == TYPE_TAG)
+                                || (type_field (p2->type) == TYPE_SIZE))
+                           p2 = p2->right;
+                         if (p2->right == NULL)
+                           _asn1_append_sequence_set (p);
+                         p = p2;
+                         state = FOUND;
+                       }
+                   }
+               }
+
+             break;
+           case TYPE_ANY:
+             if (asn1_get_tag_der
+                 (der + counter, len - counter, &amp;class, &len2,
+                  &amp;tag) != ASN1_SUCCESS)
+               return ASN1_DER_ERROR;
+             if (counter + len2 > len)
+               return ASN1_DER_ERROR;
+
+             len4 =
+               asn1_get_length_der (der + counter + len2,
+                                    len - counter - len2, &amp;len3);
+             if (len4 < -1)
+               return ASN1_DER_ERROR;
+
+             if (len4 != -1)
+               {
+                 len2 += len4;
+                 if (state == FOUND)
+                   {
+                     _asn1_set_value_octet (p, der + counter, len2 + len3);
+                     temp2 = NULL;
+
+                     if (p == nodeFound)
+                       state = EXIT;
+                   }
+                 counter += len2 + len3;
+               }
+             else
+               {               /* indefinite length */
+                 /* Check indefinite lenth method in an EXPLICIT TAG */
+                 if ((p->type &amp; CONST_TAG) && (der[counter - 1] == 0x80))
+                   indefinite = 1;
+                 else
+                   indefinite = 0;
+
+                 len2 = len - counter;
+                 ris =
+                   _asn1_get_indefinite_length_string (der + counter, &amp;len2);
+                 if (ris != ASN1_SUCCESS)
+                   {
+                     asn1_delete_structure (structure);
+                     return ris;
+                   }
+
+                 if (state == FOUND)
+                   {
+                     _asn1_set_value_octet (p, der + counter, len2);
+
+                     if (p == nodeFound)
+                       state = EXIT;
+                   }
+
+                 counter += len2;
+
+                 /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with
+                    an indefinite length method. */
+                 if (indefinite)
+                   {
+                     if (!der[counter] &amp;& !der[counter + 1])
+                       {
+                         counter += 2;
+                       }
+                     else
+                       {
+                         asn1_delete_structure (structure);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+               }
+             move = RIGHT;
+             break;
+
+           default:
+             move = (move == UP) ? RIGHT : DOWN;
+             break;
+           }
+       }
+
+      if ((p == node &amp;& move != DOWN) || (state == EXIT))
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           {
+             p = p->down;
+
+             if (state != FOUND)
+               {
+                 nameLen -= strlen (p->name) + 1;
+                 if (nameLen > 0)
+                   {
+                     if (currentName[0])
+                       strcat (currentName, ".");
+                     strcat (currentName, p->name);
+                   }
+                 else
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_MEM_ERROR;
+                   }
+                 if (!(strcmp (currentName, elementName)))
+                   {
+                     state = FOUND;
+                     nodeFound = p;
+                   }
+                 else
+                   if (!memcmp
+                       (currentName, elementName, strlen (currentName)))
+                   state = SAME_BRANCH;
+                 else
+                   state = OTHER_BRANCH;
+               }
+           }
+         else
+           move = RIGHT;
+       }
+
+      if ((move == RIGHT) &amp;& !(p->type & CONST_SET))
+       {
+         if (p->right)
+           {
+             p = p->right;
+
+             if (state != FOUND)
+               {
+                 dot_p = char_p = currentName;
+                 while ((char_p = strchr (char_p, '.')))
+                   {
+                     dot_p = char_p++;
+                     dot_p++;
+                   }
+
+                 nameLen += strlen (currentName) - (dot_p - currentName);
+                 *dot_p = 0;
+
+                 nameLen -= strlen (p->name);
+                 if (nameLen > 0)
+                   strcat (currentName, p->name);
+                 else
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_MEM_ERROR;
+                   }
+
+                 if (!(strcmp (currentName, elementName)))
+                   {
+                     state = FOUND;
+                     nodeFound = p;
+                   }
+                 else
+                   if (!memcmp
+                       (currentName, elementName, strlen (currentName)))
+                   state = SAME_BRANCH;
+                 else
+                   state = OTHER_BRANCH;
+               }
+           }
+         else
+           move = UP;
+       }
+
+      if (move == UP)
+       {
+         p = _asn1_find_up (p);
+
+         if (state != FOUND)
+           {
+             dot_p = char_p = currentName;
+             while ((char_p = strchr (char_p, '.')))
+               {
+                 dot_p = char_p++;
+                 dot_p++;
+               }
+
+             nameLen += strlen (currentName) - (dot_p - currentName);
+             *dot_p = 0;
+
+             if (!(strcmp (currentName, elementName)))
+               {
+                 state = FOUND;
+                 nodeFound = p;
+               }
+             else
+               if (!memcmp (currentName, elementName, strlen (currentName)))
+               state = SAME_BRANCH;
+             else
+               state = OTHER_BRANCH;
+           }
+       }
+    }
+
+  _asn1_delete_not_used (*structure);
+
+  if (counter > len)
+    {
+      asn1_delete_structure (structure);
+      return ASN1_DER_ERROR;
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_der_decoding_src', 'asn1_der_decoding_button')"><span id="asn1_der_decoding_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_der_decoding
+</td>
+<td class="function_entry_cyclo">
+119
+</td>
+<td class="function_entry_number">
+304
+</td>
+<td class="function_entry_number">
+527
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_der_decoding_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len,
+                  char *errorDescription)
+{
+  ASN1_TYPE node, p, p2, p3;
+  char temp[128];
+  int counter, len2, len3, len4, move, ris, tlen;
+  unsigned char class;
+  unsigned long tag;
+  int indefinite, result;
+  const unsigned char *der = ider;
+
+  node = *element;
+
+  if (node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (node->type &amp; CONST_OPTION)
+    {
+      asn1_delete_structure (element);
+      return ASN1_GENERIC_ERROR;
+    }
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+      ris = ASN1_SUCCESS;
+      if (move != UP)
+       {
+         if (p->type &amp; CONST_SET)
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (len2 == -1)
+               {
+                 if (!der[counter] &amp;& !der[counter + 1])
+                   {
+                     p = p2;
+                     move = UP;
+                     counter += 2;
+                     continue;
+                   }
+               }
+             else if (counter == len2)
+               {
+                 p = p2;
+                 move = UP;
+                 continue;
+               }
+             else if (counter > len2)
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+             p2 = p2->down;
+             while (p2)
+               {
+                 if ((p2->type &amp; CONST_SET) && (p2->type & CONST_NOT_USED))
+                   {
+                     if (type_field (p2->type) != TYPE_CHOICE)
+                       ris =
+                         _asn1_extract_tag_der (p2, der + counter,
+                                                len - counter, &amp;len2);
+                     else
+                       {
+                         p3 = p2->down;
+                         while (p3)
+                           {
+                             ris =
+                               _asn1_extract_tag_der (p3, der + counter,
+                                                      len - counter, &amp;len2);
+                             if (ris == ASN1_SUCCESS)
+                               break;
+                             p3 = p3->right;
+                           }
+                       }
+                     if (ris == ASN1_SUCCESS)
+                       {
+                         p2->type &amp;= ~CONST_NOT_USED;
+                         p = p2;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+           }
+
+         if ((p->type &amp; CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter == len2)
+               {
+                 if (p->right)
+                   {
+                     p2 = p->right;
+                     move = RIGHT;
+                   }
+                 else
+                   move = UP;
+
+                 if (p->type &amp; CONST_OPTION)
+                   asn1_delete_structure (&amp;p);
+
+                 p = p2;
+                 continue;
+               }
+           }
+
+         if (type_field (p->type) == TYPE_CHOICE)
+           {
+             while (p->down)
+               {
+                 if (counter < len)
+                   ris =
+                     _asn1_extract_tag_der (p->down, der + counter,
+                                            len - counter, &amp;len2);
+                 else
+                   ris = ASN1_DER_ERROR;
+                 if (ris == ASN1_SUCCESS)
+                   {
+                     while (p->down->right)
+                       {
+                         p2 = p->down->right;
+                         asn1_delete_structure (&amp;p2);
+                       }
+                     break;
+                   }
+                 else if (ris == ASN1_ERROR_TYPE_ANY)
+                   {
+                     asn1_delete_structure (element);
+                     return ASN1_ERROR_TYPE_ANY;
+                   }
+                 else
+                   {
+                     p2 = p->down;
+                     asn1_delete_structure (&amp;p2);
+                   }
+               }
+
+             if (p->down == NULL)
+               {
+                 if (!(p->type &amp; CONST_OPTION))
+                   {
+                     asn1_delete_structure (element);
+                     return ASN1_DER_ERROR;
+                   }
+               }
+             else
+               p = p->down;
+           }
+
+         if ((p->type &amp; CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if ((len2 != -1) &amp;& (counter > len2))
+               ris = ASN1_TAG_ERROR;
+           }
+
+         if (ris == ASN1_SUCCESS)
+           ris =
+             _asn1_extract_tag_der (p, der + counter, len - counter, &amp;len2);
+         if (ris != ASN1_SUCCESS)
+           {
+             if (p->type &amp; CONST_OPTION)
+               {
+                 p->type |= CONST_NOT_USED;
+                 move = RIGHT;
+               }
+             else if (p->type &amp; CONST_DEFAULT)
+               {
+                 _asn1_set_value (p, NULL, 0);
+                 move = RIGHT;
+               }
+             else
+               {
+                 if (errorDescription != NULL)
+                   _asn1_error_description_tag_error (p, errorDescription);
+
+                 asn1_delete_structure (element);
+                 return ASN1_TAG_ERROR;
+               }
+           }
+         else
+           counter += len2;
+       }
+
+      if (ris == ASN1_SUCCESS)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_NULL:
+             if (der[counter])
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_BOOLEAN:
+             if (der[counter++] != 1)
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+             if (der[counter++] == 0)
+               _asn1_set_value (p, "F", 1);
+             else
+               _asn1_set_value (p, "T", 1);
+             move = RIGHT;
+             break;
+           case TYPE_INTEGER:
+           case TYPE_ENUMERATED:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (len2 + len3 > len - counter)
+               return ASN1_DER_ERROR;
+             _asn1_set_value (p, der + counter, len3 + len2);
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_OBJECT_ID:
+             result =
+               _asn1_get_objectid_der (der + counter, len - counter, &amp;len2,
+                                       temp, sizeof (temp));
+             if (result != ASN1_SUCCESS)
+               {
+                 asn1_delete_structure (element);
+                 return result;
+               }
+
+             tlen = strlen (temp);
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_TIME:
+             result =
+               _asn1_get_time_der (der + counter, len - counter, &amp;len2, temp,
+                                   sizeof (temp) - 1);
+             if (result != ASN1_SUCCESS)
+               {
+                 asn1_delete_structure (element);
+                 return result;
+               }
+             tlen = strlen (temp);
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_OCTET_STRING:
+             len3 = len - counter;
+             ris = _asn1_get_octet_string (der + counter, p, &amp;len3);
+             if (ris != ASN1_SUCCESS)
+               return ris;
+             counter += len3;
+             move = RIGHT;
+             break;
+           case TYPE_GENERALSTRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (len3 + len2 > len - counter)
+               return ASN1_DER_ERROR;
+             _asn1_set_value (p, der + counter, len3 + len2);
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_BIT_STRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (len3 + len2 > len - counter)
+               return ASN1_DER_ERROR;
+             _asn1_set_value (p, der + counter, len3 + len2);
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_SEQUENCE:
+           case TYPE_SET:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 _asn1_set_value (p, NULL, 0);
+                 if (len2 == -1)
+                   {           /* indefinite length method */
+                     if (len - counter + 1 > 0)
+                       {
+                         if ((der[counter]) || der[counter + 1])
+                           {
+                             asn1_delete_structure (element);
+                             return ASN1_DER_ERROR;
+                           }
+                       }
+                     else
+                       return ASN1_DER_ERROR;
+                     counter += 2;
+                   }
+                 else
+                   {           /* definite length method */
+                     if (len2 != counter)
+                       {
+                         asn1_delete_structure (element);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+                 move = RIGHT;
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &amp;len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if (len3 > 0)
+                   {
+                     _asn1_ltostr (counter + len3, temp);
+                     tlen = strlen (temp);
+                     if (tlen > 0)
+                       _asn1_set_value (p, temp, tlen + 1);
+                     move = DOWN;
+                   }
+                 else if (len3 == 0)
+                   {
+                     p2 = p->down;
+                     while (p2)
+                       {
+                         if (type_field (p2->type) != TYPE_TAG)
+                           {
+                             p3 = p2->right;
+                             asn1_delete_structure (&amp;p2);
+                             p2 = p3;
+                           }
+                         else
+                           p2 = p2->right;
+                       }
+                     move = RIGHT;
+                   }
+                 else
+                   {           /* indefinite length method */
+                     _asn1_set_value (p, "-1", 3);
+                     move = DOWN;
+                   }
+               }
+             break;
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SET_OF:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 if (len2 == -1)
+                   {           /* indefinite length method */
+                     if ((counter + 2) > len)
+                       return ASN1_DER_ERROR;
+                     if ((der[counter]) || der[counter + 1])
+                       {
+                         _asn1_append_sequence_set (p);
+                         p = p->down;
+                         while (p->right)
+                           p = p->right;
+                         move = RIGHT;
+                         continue;
+                       }
+                     _asn1_set_value (p, NULL, 0);
+                     counter += 2;
+                   }
+                 else
+                   {           /* definite length method */
+                     if (len2 > counter)
+                       {
+                         _asn1_append_sequence_set (p);
+                         p = p->down;
+                         while (p->right)
+                           p = p->right;
+                         move = RIGHT;
+                         continue;
+                       }
+                     _asn1_set_value (p, NULL, 0);
+                     if (len2 != counter)
+                       {
+                         asn1_delete_structure (element);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &amp;len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if (len3)
+                   {
+                     if (len3 > 0)
+                       {       /* definite length method */
+                         _asn1_ltostr (counter + len3, temp);
+                         tlen = strlen (temp);
+
+                         if (tlen > 0)
+                           _asn1_set_value (p, temp, tlen + 1);
+                       }
+                     else
+                       {       /* indefinite length method */
+                         _asn1_set_value (p, "-1", 3);
+                       }
+                     p2 = p->down;
+                     while ((type_field (p2->type) == TYPE_TAG)
+                            || (type_field (p2->type) == TYPE_SIZE))
+                       p2 = p2->right;
+                     if (p2->right == NULL)
+                       _asn1_append_sequence_set (p);
+                     p = p2;
+                   }
+               }
+             move = RIGHT;
+             break;
+           case TYPE_ANY:
+             if (asn1_get_tag_der
+                 (der + counter, len - counter, &amp;class, &len2,
+                  &amp;tag) != ASN1_SUCCESS)
+               return ASN1_DER_ERROR;
+             if (counter + len2 > len)
+               return ASN1_DER_ERROR;
+             len4 =
+               asn1_get_length_der (der + counter + len2,
+                                    len - counter - len2, &amp;len3);
+             if (len4 < -1)
+               return ASN1_DER_ERROR;
+             if (len4 > len - counter + len2 + len3)
+               return ASN1_DER_ERROR;
+             if (len4 != -1)
+               {
+                 len2 += len4;
+                 _asn1_set_value_octet (p, der + counter, len2 + len3);
+                 counter += len2 + len3;
+               }
+             else
+               {               /* indefinite length */
+                 /* Check indefinite lenth method in an EXPLICIT TAG */
+                 if ((p->type &amp; CONST_TAG) && (der[counter - 1] == 0x80))
+                   indefinite = 1;
+                 else
+                   indefinite = 0;
+
+                 len2 = len - counter;
+                 ris =
+                   _asn1_get_indefinite_length_string (der + counter, &amp;len2);
+                 if (ris != ASN1_SUCCESS)
+                   {
+                     asn1_delete_structure (element);
+                     return ris;
+                   }
+
+                 _asn1_set_value_octet (p, der + counter, len2);
+                 counter += len2;
+
+                 /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with
+                    an indefinite length method. */
+                 if (indefinite)
+                   {
+                     if (!der[counter] &amp;& !der[counter + 1])
+                       {
+                         counter += 2;
+                       }
+                     else
+                       {
+                         asn1_delete_structure (element);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+               }
+             move = RIGHT;
+             break;
+           default:
+             move = (move == UP) ? RIGHT : DOWN;
+             break;
+           }
+       }
+
+      if (p == node &amp;& move != DOWN)
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+      if ((move == RIGHT) &amp;& !(p->type & CONST_SET))
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  _asn1_delete_not_used (*element);
+
+  if (counter != len)
+    {
+      asn1_delete_structure (element);
+      return ASN1_DER_ERROR;
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_write_value_src', 'asn1_write_value_button')"><span id="asn1_write_value_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_write_value
+</td>
+<td class="function_entry_cyclo">
+111
+</td>
+<td class="function_entry_number">
+208
+</td>
+<td class="function_entry_number">
+343
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_write_value_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_write_value (ASN1_TYPE node_root, const char *name,
+                 const void *ivalue, int len)
+{
+  ASN1_TYPE node, p, p2;
+  unsigned char *temp, *value_temp = NULL, *default_temp = NULL;
+  int len2, k, k2, negative;
+  size_t i;
+  const unsigned char *value = ivalue;
+
+  node = asn1_find_node (node_root, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if ((node->type &amp; CONST_OPTION) && (value == NULL) && (len == 0))
+    {
+      asn1_delete_structure (&amp;node);
+      return ASN1_SUCCESS;
+    }
+
+  if ((type_field (node->type) == TYPE_SEQUENCE_OF) &amp;& (value == NULL)
+      &amp;& (len == 0))
+    {
+      p = node->down;
+      while ((type_field (p->type) == TYPE_TAG)
+            || (type_field (p->type) == TYPE_SIZE))
+       p = p->right;
+
+      while (p->right)
+       asn1_delete_structure (&amp;p->right);
+
+      return ASN1_SUCCESS;
+    }
+
+  switch (type_field (node->type))
+    {
+    case TYPE_BOOLEAN:
+      if (!strcmp (value, "TRUE"))
+       {
+         if (node->type &amp; CONST_DEFAULT)
+           {
+             p = node->down;
+             while (type_field (p->type) != TYPE_DEFAULT)
+               p = p->right;
+             if (p->type &amp; CONST_TRUE)
+               _asn1_set_value (node, NULL, 0);
+             else
+               _asn1_set_value (node, "T", 1);
+           }
+         else
+           _asn1_set_value (node, "T", 1);
+       }
+      else if (!strcmp (value, "FALSE"))
+       {
+         if (node->type &amp; CONST_DEFAULT)
+           {
+             p = node->down;
+             while (type_field (p->type) != TYPE_DEFAULT)
+               p = p->right;
+             if (p->type &amp; CONST_FALSE)
+               _asn1_set_value (node, NULL, 0);
+             else
+               _asn1_set_value (node, "F", 1);
+           }
+         else
+           _asn1_set_value (node, "F", 1);
+       }
+      else
+       return ASN1_VALUE_NOT_VALID;
+      break;
+    case TYPE_INTEGER:
+    case TYPE_ENUMERATED:
+      if (len == 0)
+       {
+         if ((isdigit (value[0])) || (value[0] == '-'))
+           {
+             value_temp =
+               (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+             if (value_temp == NULL)
+               return ASN1_MEM_ALLOC_ERROR;
+
+             _asn1_convert_integer (value, value_temp,
+                                    SIZEOF_UNSIGNED_LONG_INT, &amp;len);
+           }
+         else
+           {                   /* is an identifier like v1 */
+             if (!(node->type &amp; CONST_LIST))
+               return ASN1_VALUE_NOT_VALID;
+             p = node->down;
+             while (p)
+               {
+                 if (type_field (p->type) == TYPE_CONSTANT)
+                   {
+                     if ((p->name) &amp;& (!strcmp (p->name, value)))
+                       {
+                         value_temp =
+                           (unsigned char *)
+                           _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+                         if (value_temp == NULL)
+                           return ASN1_MEM_ALLOC_ERROR;
+
+                         _asn1_convert_integer (p->value,
+                                                value_temp,
+                                                SIZEOF_UNSIGNED_LONG_INT,
+                                                &amp;len);
+                         break;
+                       }
+                   }
+                 p = p->right;
+               }
+             if (p == NULL)
+               return ASN1_VALUE_NOT_VALID;
+           }
+       }
+      else
+       {                       /* len != 0 */
+         value_temp = (unsigned char *) _asn1_malloc (len);
+         if (value_temp == NULL)
+           return ASN1_MEM_ALLOC_ERROR;
+         memcpy (value_temp, value, len);
+       }
+
+
+      if (value_temp[0] &amp; 0x80)
+       negative = 1;
+      else
+       negative = 0;
+
+      if (negative &amp;& (type_field (node->type) == TYPE_ENUMERATED))
+       {
+         _asn1_free (value_temp);
+         return ASN1_VALUE_NOT_VALID;
+       }
+
+      for (k = 0; k < len - 1; k++)
+       if (negative &amp;& (value_temp[k] != 0xFF))
+         break;
+       else if (!negative &amp;& value_temp[k])
+         break;
+
+      if ((negative &amp;& !(value_temp[k] & 0x80)) ||
+         (!negative &amp;& (value_temp[k] & 0x80)))
+       k--;
+
+      _asn1_set_value_octet (node, value_temp + k, len - k);
+
+      if (node->type &amp; CONST_DEFAULT)
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if ((isdigit (p->value[0])) || (p->value[0] == '-'))
+           {
+             default_temp =
+               (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+             if (default_temp == NULL)
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_MEM_ALLOC_ERROR;
+               }
+
+             _asn1_convert_integer (p->value, default_temp,
+                                    SIZEOF_UNSIGNED_LONG_INT, &amp;len2);
+           }
+         else
+           {                   /* is an identifier like v1 */
+             if (!(node->type &amp; CONST_LIST))
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_VALUE_NOT_VALID;
+               }
+             p2 = node->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) == TYPE_CONSTANT)
+                   {
+                     if ((p2->name) &amp;& (!strcmp (p2->name, p->value)))
+                       {
+                         default_temp =
+                           (unsigned char *)
+                           _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+                         if (default_temp == NULL)
+                           {
+                             _asn1_free (value_temp);
+                             return ASN1_MEM_ALLOC_ERROR;
+                           }
+
+                         _asn1_convert_integer (p2->value,
+                                                default_temp,
+                                                SIZEOF_UNSIGNED_LONG_INT,
+                                                &amp;len2);
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_VALUE_NOT_VALID;
+               }
+           }
+
+
+         if ((len - k) == len2)
+           {
+             for (k2 = 0; k2 < len2; k2++)
+               if (value_temp[k + k2] != default_temp[k2])
+                 {
+                   break;
+                 }
+             if (k2 == len2)
+               _asn1_set_value (node, NULL, 0);
+           }
+         _asn1_free (default_temp);
+       }
+      _asn1_free (value_temp);
+      break;
+    case TYPE_OBJECT_ID:
+      for (i = 0; i < strlen (value); i++)
+       if ((!isdigit (value[i])) &amp;& (value[i] != '.') && (value[i] != '+'))
+         return ASN1_VALUE_NOT_VALID;
+      if (node->type &amp; CONST_DEFAULT)
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if (!strcmp (value, p->value))
+           {
+             _asn1_set_value (node, NULL, 0);
+             break;
+           }
+       }
+      _asn1_set_value (node, value, strlen (value) + 1);
+      break;
+    case TYPE_TIME:
+      if (node->type &amp; CONST_UTC)
+       {
+         if (strlen (value) < 11)
+           return ASN1_VALUE_NOT_VALID;
+         for (k = 0; k < 10; k++)
+           if (!isdigit (value[k]))
+             return ASN1_VALUE_NOT_VALID;
+         switch (strlen (value))
+           {
+           case 11:
+             if (value[10] != 'Z')
+               return ASN1_VALUE_NOT_VALID;
+             break;
+           case 13:
+             if ((!isdigit (value[10])) || (!isdigit (value[11])) ||
+                 (value[12] != 'Z'))
+               return ASN1_VALUE_NOT_VALID;
+             break;
+           case 15:
+             if ((value[10] != '+') &amp;& (value[10] != '-'))
+               return ASN1_VALUE_NOT_VALID;
+             for (k = 11; k < 15; k++)
+               if (!isdigit (value[k]))
+                 return ASN1_VALUE_NOT_VALID;
+             break;
+           case 17:
+             if ((!isdigit (value[10])) || (!isdigit (value[11])))
+               return ASN1_VALUE_NOT_VALID;
+             if ((value[12] != '+') &amp;& (value[12] != '-'))
+               return ASN1_VALUE_NOT_VALID;
+             for (k = 13; k < 17; k++)
+               if (!isdigit (value[k]))
+                 return ASN1_VALUE_NOT_VALID;
+             break;
+           default:
+             return ASN1_VALUE_NOT_FOUND;
+           }
+         _asn1_set_value (node, value, strlen (value) + 1);
+       }
+      else
+       {                       /* GENERALIZED TIME */
+         if (value)
+           _asn1_set_value (node, value, strlen (value) + 1);
+       }
+      break;
+    case TYPE_OCTET_STRING:
+      if (len == 0)
+       len = strlen (value);
+      _asn1_set_value_octet (node, value, len);
+      break;
+    case TYPE_GENERALSTRING:
+      if (len == 0)
+       len = strlen (value);
+      _asn1_set_value_octet (node, value, len);
+      break;
+    case TYPE_BIT_STRING:
+      if (len == 0)
+       len = strlen (value);
+      asn1_length_der ((len >> 3) + 2, NULL, &amp;len2);
+      temp = (unsigned char *) _asn1_malloc ((len >> 3) + 2 + len2);
+      if (temp == NULL)
+       return ASN1_MEM_ALLOC_ERROR;
+
+      asn1_bit_der (value, len, temp, &amp;len2);
+      _asn1_set_value_m (node, temp, len2);
+      temp = NULL;
+      break;
+    case TYPE_CHOICE:
+      p = node->down;
+      while (p)
+       {
+         if (!strcmp (p->name, value))
+           {
+             p2 = node->down;
+             while (p2)
+               {
+                 if (p2 != p)
+                   {
+                     asn1_delete_structure (&amp;p2);
+                     p2 = node->down;
+                   }
+                 else
+                   p2 = p2->right;
+               }
+             break;
+           }
+         p = p->right;
+       }
+      if (!p)
+       return ASN1_ELEMENT_NOT_FOUND;
+      break;
+    case TYPE_ANY:
+      _asn1_set_value_octet (node, value, len);
+      break;
+    case TYPE_SEQUENCE_OF:
+    case TYPE_SET_OF:
+      if (strcmp (value, "NEW"))
+       return ASN1_VALUE_NOT_VALID;
+      _asn1_append_sequence_set (node);
+      break;
+    default:
+      return ASN1_ELEMENT_NOT_FOUND;
+      break;
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_print_structure_src', 'asn1_print_structure_button')"><span id="asn1_print_structure_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_print_structure
+</td>
+<td class="function_entry_cyclo">
+125
+</td>
+<td class="function_entry_number">
+235
+</td>
+<td class="function_entry_number">
+349
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_print_structure_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+void
+asn1_print_structure (FILE * out, ASN1_TYPE structure, const char *name,
+                     int mode)
+{
+  ASN1_TYPE p, root;
+  int k, indent = 0, len, len2, len3;
+
+  if (out == NULL)
+    return;
+
+  root = asn1_find_node (structure, name);
+
+  if (root == NULL)
+    return;
+
+  p = root;
+  while (p)
+    {
+      if (mode == ASN1_PRINT_ALL)
+       {
+         for (k = 0; k < indent; k++)
+           fprintf (out, " ");
+         fprintf (out, "name:");
+         if (p->name)
+           fprintf (out, "%s  ", p->name);
+         else
+           fprintf (out, "NULL  ");
+       }
+      else
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+           case TYPE_TAG:
+           case TYPE_SIZE:
+             break;
+           default:
+             for (k = 0; k < indent; k++)
+               fprintf (out, " ");
+             fprintf (out, "name:");
+             if (p->name)
+               fprintf (out, "%s  ", p->name);
+             else
+               fprintf (out, "NULL  ");
+           }
+       }
+
+      if (mode != ASN1_PRINT_NAME)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+             if (mode == ASN1_PRINT_ALL)
+               fprintf (out, "type:CONST");
+             break;
+           case TYPE_TAG:
+             if (mode == ASN1_PRINT_ALL)
+               fprintf (out, "type:TAG");
+             break;
+           case TYPE_SIZE:
+             if (mode == ASN1_PRINT_ALL)
+               fprintf (out, "type:SIZE");
+             break;
+           case TYPE_DEFAULT:
+             fprintf (out, "type:DEFAULT");
+             break;
+           case TYPE_NULL:
+             fprintf (out, "type:NULL");
+             break;
+           case TYPE_IDENTIFIER:
+             fprintf (out, "type:IDENTIFIER");
+             break;
+           case TYPE_INTEGER:
+             fprintf (out, "type:INTEGER");
+             break;
+           case TYPE_ENUMERATED:
+             fprintf (out, "type:ENUMERATED");
+             break;
+           case TYPE_TIME:
+             fprintf (out, "type:TIME");
+             break;
+           case TYPE_BOOLEAN:
+             fprintf (out, "type:BOOLEAN");
+             break;
+           case TYPE_SEQUENCE:
+             fprintf (out, "type:SEQUENCE");
+             break;
+           case TYPE_BIT_STRING:
+             fprintf (out, "type:BIT_STR");
+             break;
+           case TYPE_OCTET_STRING:
+             fprintf (out, "type:OCT_STR");
+             break;
+           case TYPE_GENERALSTRING:
+             fprintf (out, "type:GENERALSTRING");
+             break;
+           case TYPE_SEQUENCE_OF:
+             fprintf (out, "type:SEQ_OF");
+             break;
+           case TYPE_OBJECT_ID:
+             fprintf (out, "type:OBJ_ID");
+             break;
+           case TYPE_ANY:
+             fprintf (out, "type:ANY");
+             break;
+           case TYPE_SET:
+             fprintf (out, "type:SET");
+             break;
+           case TYPE_SET_OF:
+             fprintf (out, "type:SET_OF");
+             break;
+           case TYPE_CHOICE:
+             fprintf (out, "type:CHOICE");
+             break;
+           case TYPE_DEFINITIONS:
+             fprintf (out, "type:DEFINITIONS");
+             break;
+           default:
+             break;
+           }
+       }
+
+      if ((mode == ASN1_PRINT_NAME_TYPE_VALUE) || (mode == ASN1_PRINT_ALL))
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+             if (mode == ASN1_PRINT_ALL)
+               if (p->value)
+                 fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_TAG:
+             if (mode == ASN1_PRINT_ALL)
+               if (p->value)
+                 fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_SIZE:
+             if (mode == ASN1_PRINT_ALL)
+               if (p->value)
+                 fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_DEFAULT:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             else if (p->type &amp; CONST_TRUE)
+               fprintf (out, "  value:TRUE");
+             else if (p->type &amp; CONST_FALSE)
+               fprintf (out, "  value:FALSE");
+             break;
+           case TYPE_IDENTIFIER:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_INTEGER:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &amp;len2);
+                 fprintf (out, "  value:0x");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_ENUMERATED:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &amp;len2);
+                 fprintf (out, "  value:0x");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_TIME:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_BOOLEAN:
+             if (p->value)
+               {
+                 if (p->value[0] == 'T')
+                   fprintf (out, "  value:TRUE");
+                 else if (p->value[0] == 'F')
+                   fprintf (out, "  value:FALSE");
+               }
+             break;
+           case TYPE_BIT_STRING:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &amp;len2);
+                 if (len > 0)
+                   {
+                     fprintf (out, "  value(%i):",
+                              (len - 1) * 8 - (p->value[len2]));
+                     for (k = 1; k < len; k++)
+                       fprintf (out, "%02x", (p->value)[k + len2]);
+                   }
+               }
+             break;
+           case TYPE_OCTET_STRING:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &amp;len2);
+                 fprintf (out, "  value:");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_GENERALSTRING:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &amp;len2);
+                 fprintf (out, "  value:");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_OBJECT_ID:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_ANY:
+             if (p->value)
+               {
+                 len3 = -1;
+                 len2 = asn1_get_length_der (p->value, p->value_len, &amp;len3);
+                 fprintf (out, "  value:");
+                 if (len2 > 0)
+                   for (k = 0; k < len2; k++)
+                     fprintf (out, "%02x", (p->value)[k + len3]);
+               }
+             break;
+           case TYPE_SET:
+           case TYPE_SET_OF:
+           case TYPE_CHOICE:
+           case TYPE_DEFINITIONS:
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SEQUENCE:
+           case TYPE_NULL:
+             break;
+           default:
+             break;
+           }
+       }
+
+      if (mode == ASN1_PRINT_ALL)
+       {
+         if (p->type &amp; 0x1FFFFF00)
+           {
+             fprintf (out, "  attr:");
+             if (p->type &amp; CONST_UNIVERSAL)
+               fprintf (out, "UNIVERSAL,");
+             if (p->type &amp; CONST_PRIVATE)
+               fprintf (out, "PRIVATE,");
+             if (p->type &amp; CONST_APPLICATION)
+               fprintf (out, "APPLICATION,");
+             if (p->type &amp; CONST_EXPLICIT)
+               fprintf (out, "EXPLICIT,");
+             if (p->type &amp; CONST_IMPLICIT)
+               fprintf (out, "IMPLICIT,");
+             if (p->type &amp; CONST_TAG)
+               fprintf (out, "TAG,");
+             if (p->type &amp; CONST_DEFAULT)
+               fprintf (out, "DEFAULT,");
+             if (p->type &amp; CONST_TRUE)
+               fprintf (out, "TRUE,");
+             if (p->type &amp; CONST_FALSE)
+               fprintf (out, "FALSE,");
+             if (p->type &amp; CONST_LIST)
+               fprintf (out, "LIST,");
+             if (p->type &amp; CONST_MIN_MAX)
+               fprintf (out, "MIN_MAX,");
+             if (p->type &amp; CONST_OPTION)
+               fprintf (out, "OPTION,");
+             if (p->type &amp; CONST_1_PARAM)
+               fprintf (out, "1_PARAM,");
+             if (p->type &amp; CONST_SIZE)
+               fprintf (out, "SIZE,");
+             if (p->type &amp; CONST_DEFINED_BY)
+               fprintf (out, "DEF_BY,");
+             if (p->type &amp; CONST_GENERALIZED)
+               fprintf (out, "GENERALIZED,");
+             if (p->type &amp; CONST_UTC)
+               fprintf (out, "UTC,");
+             if (p->type &amp; CONST_SET)
+               fprintf (out, "SET,");
+             if (p->type &amp; CONST_NOT_USED)
+               fprintf (out, "NOT_USED,");
+             if (p->type &amp; CONST_ASSIGN)
+               fprintf (out, "ASSIGNMENT,");
+           }
+       }
+
+      if (mode == ASN1_PRINT_ALL)
+       {
+         fprintf (out, "\n");
+       }
+      else
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+           case TYPE_TAG:
+           case TYPE_SIZE:
+             break;
+           default:
+             fprintf (out, "\n");
+           }
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+         indent += 2;
+       }
+      else if (p == root)
+       {
+         p = NULL;
+         break;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == root)
+               {
+                 p = NULL;
+                 break;
+               }
+             indent -= 2;
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_der_decoding_startEnd_src', 'asn1_der_decoding_startEnd_button')"><span id="asn1_der_decoding_startEnd_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_der_decoding_startEnd
+</td>
+<td class="function_entry_cyclo">
+85
+</td>
+<td class="function_entry_number">
+188
+</td>
+<td class="function_entry_number">
+320
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_der_decoding_startEnd_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len,
+                           const char *name_element, int *start, int *end)
+{
+  ASN1_TYPE node, node_to_find, p, p2, p3;
+  int counter, len2, len3, len4, move, ris;
+  unsigned char class;
+  unsigned long tag;
+  int indefinite;
+  const unsigned char *der = ider;
+
+  node = element;
+
+  if (node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  node_to_find = asn1_find_node (node, name_element);
+
+  if (node_to_find == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (node_to_find == node)
+    {
+      *start = 0;
+      *end = len - 1;
+      return ASN1_SUCCESS;
+    }
+
+  if (node->type &amp; CONST_OPTION)
+    return ASN1_GENERIC_ERROR;
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+      ris = ASN1_SUCCESS;
+
+      if (move != UP)
+       {
+         if (p->type &amp; CONST_SET)
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (len2 == -1)
+               {
+                 if (!der[counter] &amp;& !der[counter + 1])
+                   {
+                     p = p2;
+                     move = UP;
+                     counter += 2;
+                     continue;
+                   }
+               }
+             else if (counter == len2)
+               {
+                 p = p2;
+                 move = UP;
+                 continue;
+               }
+             else if (counter > len2)
+               return ASN1_DER_ERROR;
+             p2 = p2->down;
+             while (p2)
+               {
+                 if ((p2->type &amp; CONST_SET) && (p2->type & CONST_NOT_USED))
+                   {           /* CONTROLLARE */
+                     if (type_field (p2->type) != TYPE_CHOICE)
+                       ris =
+                         _asn1_extract_tag_der (p2, der + counter,
+                                                len - counter, &amp;len2);
+                     else
+                       {
+                         p3 = p2->down;
+                         ris =
+                           _asn1_extract_tag_der (p3, der + counter,
+                                                  len - counter, &amp;len2);
+                       }
+                     if (ris == ASN1_SUCCESS)
+                       {
+                         p2->type &amp;= ~CONST_NOT_USED;
+                         p = p2;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               return ASN1_DER_ERROR;
+           }
+
+         if (p == node_to_find)
+           *start = counter;
+
+         if (type_field (p->type) == TYPE_CHOICE)
+           {
+             p = p->down;
+             ris =
+               _asn1_extract_tag_der (p, der + counter, len - counter,
+                                      &amp;len2);
+             if (p == node_to_find)
+               *start = counter;
+           }
+
+         if (ris == ASN1_SUCCESS)
+           ris =
+             _asn1_extract_tag_der (p, der + counter, len - counter, &amp;len2);
+         if (ris != ASN1_SUCCESS)
+           {
+             if (p->type &amp; CONST_OPTION)
+               {
+                 p->type |= CONST_NOT_USED;
+                 move = RIGHT;
+               }
+             else if (p->type &amp; CONST_DEFAULT)
+               {
+                 move = RIGHT;
+               }
+             else
+               {
+                 return ASN1_TAG_ERROR;
+               }
+           }
+         else
+           counter += len2;
+       }
+
+      if (ris == ASN1_SUCCESS)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_NULL:
+             if (der[counter])
+               return ASN1_DER_ERROR;
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_BOOLEAN:
+             if (der[counter++] != 1)
+               return ASN1_DER_ERROR;
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_INTEGER:
+           case TYPE_ENUMERATED:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_OBJECT_ID:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len2 + len3;
+             move = RIGHT;
+             break;
+           case TYPE_TIME:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len2 + len3;
+             move = RIGHT;
+             break;
+           case TYPE_OCTET_STRING:
+             len3 = len - counter;
+             ris = _asn1_get_octet_string (der + counter, NULL, &amp;len3);
+             if (ris != ASN1_SUCCESS)
+               return ris;
+             counter += len3;
+             move = RIGHT;
+             break;
+           case TYPE_GENERALSTRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_BIT_STRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &amp;len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_SEQUENCE:
+           case TYPE_SET:
+             if (move != UP)
+               {
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &amp;len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if (len3 == 0)
+                   move = RIGHT;
+                 else
+                   move = DOWN;
+               }
+             else
+               {
+                 if (!der[counter] &amp;& !der[counter + 1])   /* indefinite length method */
+                   counter += 2;
+                 move = RIGHT;
+               }
+             break;
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SET_OF:
+             if (move != UP)
+               {
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &amp;len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if ((len3 == -1) &amp;& !der[counter] && !der[counter + 1])
+                   counter += 2;
+                 else if (len3)
+                   {
+                     p2 = p->down;
+                     while ((type_field (p2->type) == TYPE_TAG) ||
+                            (type_field (p2->type) == TYPE_SIZE))
+                       p2 = p2->right;
+                     p = p2;
+                   }
+               }
+             else
+               {
+                 if (!der[counter] &amp;& !der[counter + 1])   /* indefinite length method */
+                   counter += 2;
+               }
+             move = RIGHT;
+             break;
+           case TYPE_ANY:
+             if (asn1_get_tag_der
+                 (der + counter, len - counter, &amp;class, &len2,
+                  &amp;tag) != ASN1_SUCCESS)
+               return ASN1_DER_ERROR;
+             if (counter + len2 > len)
+               return ASN1_DER_ERROR;
+
+             len4 =
+               asn1_get_length_der (der + counter + len2,
+                                    len - counter - len2, &amp;len3);
+             if (len4 < -1)
+               return ASN1_DER_ERROR;
+
+             if (len4 != -1)
+               {
+                 counter += len2 + len4 + len3;
+               }
+             else
+               {               /* indefinite length */
+                 /* Check indefinite lenth method in an EXPLICIT TAG */
+                 if ((p->type &amp; CONST_TAG) && (der[counter - 1] == 0x80))
+                   indefinite = 1;
+                 else
+                   indefinite = 0;
+
+                 len2 = len - counter;
+                 ris =
+                   _asn1_get_indefinite_length_string (der + counter, &amp;len2);
+                 if (ris != ASN1_SUCCESS)
+                   return ris;
+                 counter += len2;
+
+                 /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with
+                    an indefinite length method. */
+                 if (indefinite)
+                   {
+                     if (!der[counter] &amp;& !der[counter + 1])
+                       counter += 2;
+                     else
+                       return ASN1_DER_ERROR;
+                   }
+               }
+             move = RIGHT;
+             break;
+           default:
+             move = (move == UP) ? RIGHT : DOWN;
+             break;
+           }
+       }
+
+      if ((p == node_to_find) &amp;& (move == RIGHT))
+       {
+         *end = counter - 1;
+         return ASN1_SUCCESS;
+       }
+
+      if (p == node &amp;& move != DOWN)
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+      if ((move == RIGHT) &amp;& !(p->type & CONST_SET))
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_ELEMENT_NOT_FOUND;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_der_coding_src', 'asn1_der_coding_button')"><span id="asn1_der_coding_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_der_coding
+</td>
+<td class="function_entry_cyclo">
+83
+</td>
+<td class="function_entry_number">
+226
+</td>
+<td class="function_entry_number">
+357
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_der_coding_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_der_coding (ASN1_TYPE element, const char *name, void *ider, int *len,
+                char *ErrorDescription)
+{
+  ASN1_TYPE node, p, p2;
+  char temp[SIZEOF_UNSIGNED_LONG_INT * 3 + 1];
+  int counter, counter_old, len2, len3, tlen, move, max_len, max_len_old;
+  asn1_retCode err;
+  unsigned char *der = ider;
+
+  node = asn1_find_node (element, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  /* Node is now a locally allocated variable.
+   * That is because in some point we modify the
+   * structure, and I don't know why! --nmav
+   */
+  node = _asn1_copy_structure3 (node);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  max_len = *len;
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+
+      counter_old = counter;
+      max_len_old = max_len;
+      if (move != UP)
+       {
+         err = _asn1_insert_tag_der (p, der, &amp;counter, &max_len);
+         if (err != ASN1_SUCCESS &amp;& err != ASN1_MEM_ERROR)
+           goto error;
+       }
+      switch (type_field (p->type))
+       {
+       case TYPE_NULL:
+         max_len--;
+         if (max_len >= 0)
+           der[counter] = 0;
+         counter++;
+         move = RIGHT;
+         break;
+       case TYPE_BOOLEAN:
+         if ((p->type &amp; CONST_DEFAULT) && (p->value == NULL))
+           {
+             counter = counter_old;
+             max_len = max_len_old;
+           }
+         else
+           {
+             if (p->value == NULL)
+               {
+                 _asn1_error_description_value_not_found (p,
+                                                          ErrorDescription);
+                 err = ASN1_VALUE_NOT_FOUND;
+                 goto error;
+               }
+             max_len -= 2;
+             if (max_len >= 0)
+               {
+                 der[counter++] = 1;
+                 if (p->value[0] == 'F')
+                   der[counter++] = 0;
+                 else
+                   der[counter++] = 0xFF;
+               }
+             else
+               counter += 2;
+           }
+         move = RIGHT;
+         break;
+       case TYPE_INTEGER:
+       case TYPE_ENUMERATED:
+         if ((p->type &amp; CONST_DEFAULT) && (p->value == NULL))
+           {
+             counter = counter_old;
+             max_len = max_len_old;
+           }
+         else
+           {
+             if (p->value == NULL)
+               {
+                 _asn1_error_description_value_not_found (p,
+                                                          ErrorDescription);
+                 err = ASN1_VALUE_NOT_FOUND;
+                 goto error;
+               }
+             len2 = asn1_get_length_der (p->value, p->value_len, &amp;len3);
+             if (len2 < 0)
+               {
+                 err = ASN1_DER_ERROR;
+                 goto error;
+               }
+             max_len -= len2 + len3;
+             if (max_len >= 0)
+               memcpy (der + counter, p->value, len3 + len2);
+             counter += len3 + len2;
+           }
+         move = RIGHT;
+         break;
+       case TYPE_OBJECT_ID:
+         if ((p->type &amp; CONST_DEFAULT) && (p->value == NULL))
+           {
+             counter = counter_old;
+             max_len = max_len_old;
+           }
+         else
+           {
+             if (p->value == NULL)
+               {
+                 _asn1_error_description_value_not_found (p,
+                                                          ErrorDescription);
+                 err = ASN1_VALUE_NOT_FOUND;
+                 goto error;
+               }
+             len2 = max_len;
+             err = _asn1_objectid_der (p->value, der + counter, &amp;len2);
+             if (err != ASN1_SUCCESS &amp;& err != ASN1_MEM_ERROR)
+               goto error;
+
+             max_len -= len2;
+             counter += len2;
+           }
+         move = RIGHT;
+         break;
+       case TYPE_TIME:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = max_len;
+         err = _asn1_time_der (p->value, der + counter, &amp;len2);
+         if (err != ASN1_SUCCESS &amp;& err != ASN1_MEM_ERROR)
+           goto error;
+
+         max_len -= len2;
+         counter += len2;
+         move = RIGHT;
+         break;
+       case TYPE_OCTET_STRING:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &amp;len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2 + len3;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value, len3 + len2);
+         counter += len3 + len2;
+         move = RIGHT;
+         break;
+       case TYPE_GENERALSTRING:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &amp;len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2 + len3;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value, len3 + len2);
+         counter += len3 + len2;
+         move = RIGHT;
+         break;
+       case TYPE_BIT_STRING:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &amp;len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2 + len3;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value, len3 + len2);
+         counter += len3 + len2;
+         move = RIGHT;
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SET:
+         if (move != UP)
+           {
+             _asn1_ltostr (counter, temp);
+             tlen = strlen (temp);
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             if (p->down == NULL)
+               {
+                 move = UP;
+                 continue;
+               }
+             else
+               {
+                 p2 = p->down;
+                 while (p2 &amp;& (type_field (p2->type) == TYPE_TAG))
+                   p2 = p2->right;
+                 if (p2)
+                   {
+                     p = p2;
+                     move = RIGHT;
+                     continue;
+                   }
+                 move = UP;
+                 continue;
+               }
+           }
+         else
+           {                   /* move==UP */
+             len2 = strtol (p->value, NULL, 10);
+             _asn1_set_value (p, NULL, 0);
+             if ((type_field (p->type) == TYPE_SET) &amp;& (max_len >= 0))
+               _asn1_ordering_set (der + len2, max_len - len2, p);
+             asn1_length_der (counter - len2, temp, &amp;len3);
+             max_len -= len3;
+             if (max_len >= 0)
+               {
+                 memmove (der + len2 + len3, der + len2, counter - len2);
+                 memcpy (der + len2, temp, len3);
+               }
+             counter += len3;
+             move = RIGHT;
+           }
+         break;
+       case TYPE_SEQUENCE_OF:
+       case TYPE_SET_OF:
+         if (move != UP)
+           {
+             _asn1_ltostr (counter, temp);
+             tlen = strlen (temp);
+
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             p = p->down;
+             while ((type_field (p->type) == TYPE_TAG)
+                    || (type_field (p->type) == TYPE_SIZE))
+               p = p->right;
+             if (p->right)
+               {
+                 p = p->right;
+                 move = RIGHT;
+                 continue;
+               }
+             else
+               p = _asn1_find_up (p);
+             move = UP;
+           }
+         if (move == UP)
+           {
+             len2 = strtol (p->value, NULL, 10);
+             _asn1_set_value (p, NULL, 0);
+             if ((type_field (p->type) == TYPE_SET_OF)
+                 &amp;& (max_len - len2 > 0))
+               {
+                 _asn1_ordering_set_of (der + len2, max_len - len2, p);
+               }
+             asn1_length_der (counter - len2, temp, &amp;len3);
+             max_len -= len3;
+             if (max_len >= 0)
+               {
+                 memmove (der + len2 + len3, der + len2, counter - len2);
+                 memcpy (der + len2, temp, len3);
+               }
+             counter += len3;
+             move = RIGHT;
+           }
+         break;
+       case TYPE_ANY:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &amp;len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value + len3, len2);
+         counter += len2;
+         move = RIGHT;
+         break;
+       default:
+         move = (move == UP) ? RIGHT : DOWN;
+         break;
+       }
+
+      if ((move != DOWN) &amp;& (counter != counter_old))
+       {
+         err = _asn1_complete_explicit_tag (p, der, &amp;counter, &max_len);
+         if (err != ASN1_SUCCESS &amp;& err != ASN1_MEM_ERROR)
+           goto error;
+       }
+
+      if (p == node &amp;& move != DOWN)
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  *len = counter;
+
+  if (max_len < 0)
+    {
+      err = ASN1_MEM_ERROR;
+      goto error;
+    }
+
+  err = ASN1_SUCCESS;
+
+error:
+  asn1_delete_structure (&amp;node);
+  return err;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_untestable">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_extract_tag_der_src', '_asn1_extract_tag_der_button')"><span id="_asn1_extract_tag_der_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_extract_tag_der
+</td>
+<td class="function_entry_cyclo">
+74
+</td>
+<td class="function_entry_number">
+105
+</td>
+<td class="function_entry_number">
+197
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_extract_tag_der_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static int
+_asn1_extract_tag_der (ASN1_TYPE node, const unsigned char *der, int der_len,
+                      int *ret_len)
+{
+  ASN1_TYPE p;
+  int counter, len2, len3, is_tag_implicit;
+  unsigned long tag, tag_implicit = 0;
+  unsigned char class, class2, class_implicit = 0;
+
+  if (der_len <= 0)
+    return ASN1_GENERIC_ERROR;
+
+  counter = is_tag_implicit = 0;
+
+  if (node->type &amp; CONST_TAG)
+    {
+      p = node->down;
+      while (p)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if (p->type &amp; CONST_APPLICATION)
+               class2 = ASN1_CLASS_APPLICATION;
+             else if (p->type &amp; CONST_UNIVERSAL)
+               class2 = ASN1_CLASS_UNIVERSAL;
+             else if (p->type &amp; CONST_PRIVATE)
+               class2 = ASN1_CLASS_PRIVATE;
+             else
+               class2 = ASN1_CLASS_CONTEXT_SPECIFIC;
+
+             if (p->type &amp; CONST_EXPLICIT)
+               {
+                 if (asn1_get_tag_der
+                     (der + counter, der_len - counter, &amp;class, &len2,
+                      &amp;tag) != ASN1_SUCCESS)
+                   return ASN1_DER_ERROR;
+
+                 if (counter + len2 > der_len)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+
+                 len3 =
+                   asn1_get_length_ber (der + counter, der_len - counter,
+                                        &amp;len2);
+                 if (len3 < 0)
+                   return ASN1_DER_ERROR;
+
+                 counter += len2;
+                 if (counter > der_len)
+                   return ASN1_DER_ERROR;
+
+                 if (!is_tag_implicit)
+                   {
+                     if ((class != (class2 | ASN1_CLASS_STRUCTURED)) ||
+                         (tag != strtoul ((char *) p->value, NULL, 10)))
+                       return ASN1_TAG_ERROR;
+                   }
+                 else
+                   {           /* ASN1_TAG_IMPLICIT */
+                     if ((class != class_implicit) || (tag != tag_implicit))
+                       return ASN1_TAG_ERROR;
+                   }
+                 is_tag_implicit = 0;
+               }
+             else
+               {               /* ASN1_TAG_IMPLICIT */
+                 if (!is_tag_implicit)
+                   {
+                     if ((type_field (node->type) == TYPE_SEQUENCE) ||
+                         (type_field (node->type) == TYPE_SEQUENCE_OF) ||
+                         (type_field (node->type) == TYPE_SET) ||
+                         (type_field (node->type) == TYPE_SET_OF))
+                       class2 |= ASN1_CLASS_STRUCTURED;
+                     class_implicit = class2;
+                     tag_implicit = strtoul ((char *) p->value, NULL, 10);
+                     is_tag_implicit = 1;
+                   }
+               }
+           }
+         p = p->right;
+       }
+    }
+
+  if (is_tag_implicit)
+    {
+      if (asn1_get_tag_der
+         (der + counter, der_len - counter, &amp;class, &len2,
+          &amp;tag) != ASN1_SUCCESS)
+       return ASN1_DER_ERROR;
+      if (counter + len2 > der_len)
+       return ASN1_DER_ERROR;
+
+      if ((class != class_implicit) || (tag != tag_implicit))
+       {
+         if (type_field (node->type) == TYPE_OCTET_STRING)
+           {
+             class_implicit |= ASN1_CLASS_STRUCTURED;
+             if ((class != class_implicit) || (tag != tag_implicit))
+               return ASN1_TAG_ERROR;
+           }
+         else
+           return ASN1_TAG_ERROR;
+       }
+    }
+  else
+    {
+      if (type_field (node->type) == TYPE_TAG)
+       {
+         counter = 0;
+         *ret_len = counter;
+         return ASN1_SUCCESS;
+       }
+
+      if (asn1_get_tag_der
+         (der + counter, der_len - counter, &amp;class, &len2,
+          &amp;tag) != ASN1_SUCCESS)
+       return ASN1_DER_ERROR;
+
+      if (counter + len2 > der_len)
+       return ASN1_DER_ERROR;
+
+      switch (type_field (node->type))
+       {
+       case TYPE_NULL:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_NULL))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_BOOLEAN:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_BOOLEAN))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_INTEGER:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_INTEGER))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_ENUMERATED:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_ENUMERATED))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_OBJECT_ID:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_OBJECT_ID))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_TIME:
+         if (node->type &amp; CONST_UTC)
+           {
+             if ((class != ASN1_CLASS_UNIVERSAL)
+                 || (tag != ASN1_TAG_UTCTime))
+               return ASN1_DER_ERROR;
+           }
+         else
+           {
+             if ((class != ASN1_CLASS_UNIVERSAL)
+                 || (tag != ASN1_TAG_GENERALIZEDTime))
+               return ASN1_DER_ERROR;
+           }
+         break;
+       case TYPE_OCTET_STRING:
+         if (((class != ASN1_CLASS_UNIVERSAL)
+              &amp;& (class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED)))
+             || (tag != ASN1_TAG_OCTET_STRING))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_GENERALSTRING:
+         if ((class != ASN1_CLASS_UNIVERSAL)
+             || (tag != ASN1_TAG_GENERALSTRING))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_BIT_STRING:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_BIT_STRING))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SEQUENCE_OF:
+         if ((class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))
+             || (tag != ASN1_TAG_SEQUENCE))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_SET:
+       case TYPE_SET_OF:
+         if ((class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))
+             || (tag != ASN1_TAG_SET))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_ANY:
+         counter -= len2;
+         break;
+       default:
+         return ASN1_DER_ERROR;
+         break;
+       }
+    }
+
+  counter += len2;
+  *ret_len = counter;
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('yyparse_src', 'yyparse_button')"><span id="yyparse_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+yyparse
+</td>
+<td class="function_entry_cyclo">
+142
+</td>
+<td class="function_entry_number">
+432
+</td>
+<td class="function_entry_number">
+1199
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="yyparse_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &amp;'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &amp;yyss1, yysize * sizeof (*yyssp),
+                   &amp;yyvs1, yysize * sizeof (*yyvsp),
+                   &amp;yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &amp;yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &amp;yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+/* Line 1455 of yacc.c  */
+#line 122 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFINITIONS|(yyvsp[(3) - (8)].constant));
+                    _asn1_set_name((yyval.node),_asn1_get_name((yyvsp[(1) - (8)].node)));
+                    _asn1_set_name((yyvsp[(1) - (8)].node),"");
+                    _asn1_set_right((yyvsp[(1) - (8)].node),(yyvsp[(7) - (8)].node));
+                    _asn1_set_down((yyval.node),(yyvsp[(1) - (8)].node));
+
+                   p_tree=(yyval.node);
+                   }
+    break;
+
+  case 3:
+
+/* Line 1455 of yacc.c  */
+#line 132 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 4:
+
+/* Line 1455 of yacc.c  */
+#line 133 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(2) - (2)].str));}
+    break;
+
+  case 5:
+
+/* Line 1455 of yacc.c  */
+#line 136 "ASN1.y"
+    {strcpy((yyval.str),"-");
+                       strcat((yyval.str),(yyvsp[(2) - (2)].str));}
+    break;
+
+  case 6:
+
+/* Line 1455 of yacc.c  */
+#line 140 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
+#line 141 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 8:
+
+/* Line 1455 of yacc.c  */
+#line 144 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 9:
+
+/* Line 1455 of yacc.c  */
+#line 145 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 10:
+
+/* Line 1455 of yacc.c  */
+#line 148 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 11:
+
+/* Line 1455 of yacc.c  */
+#line 149 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 12:
+
+/* Line 1455 of yacc.c  */
+#line 152 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                       _asn1_set_value((yyval.node),(yyvsp[(2) - (3)].str),strlen((yyvsp[(2) - (3)].str))+1);}
+    break;
+
+  case 13:
+
+/* Line 1455 of yacc.c  */
+#line 154 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                      _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                                       _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 14:
+
+/* Line 1455 of yacc.c  */
+#line 159 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 15:
+
+/* Line 1455 of yacc.c  */
+#line 160 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (3)].node);
+                                            _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 16:
+
+/* Line 1455 of yacc.c  */
+#line 164 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                   _asn1_set_value((yyval.node),(yyvsp[(1) - (1)].str),strlen((yyvsp[(1) - (1)].str))+1);}
+    break;
+
+  case 17:
+
+/* Line 1455 of yacc.c  */
+#line 166 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                   _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                                    _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 18:
+
+/* Line 1455 of yacc.c  */
+#line 171 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 19:
+
+/* Line 1455 of yacc.c  */
+#line 172 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (2)].node);
+                                                    _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (2)].node)),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 20:
+
+/* Line 1455 of yacc.c  */
+#line 176 "ASN1.y"
+    {(yyval.constant)=CONST_UNIVERSAL;}
+    break;
+
+  case 21:
+
+/* Line 1455 of yacc.c  */
+#line 177 "ASN1.y"
+    {(yyval.constant)=CONST_PRIVATE;}
+    break;
+
+  case 22:
+
+/* Line 1455 of yacc.c  */
+#line 178 "ASN1.y"
+    {(yyval.constant)=CONST_APPLICATION;}
+    break;
+
+  case 23:
+
+/* Line 1455 of yacc.c  */
+#line 181 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TAG);
+                            _asn1_set_value((yyval.node),(yyvsp[(2) - (3)].str),strlen((yyvsp[(2) - (3)].str))+1);}
+    break;
+
+  case 24:
+
+/* Line 1455 of yacc.c  */
+#line 183 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TAG | (yyvsp[(2) - (4)].constant));
+                                _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 25:
+
+/* Line 1455 of yacc.c  */
+#line 187 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 26:
+
+/* Line 1455 of yacc.c  */
+#line 188 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_EXPLICIT);}
+    break;
+
+  case 27:
+
+/* Line 1455 of yacc.c  */
+#line 189 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_IMPLICIT);}
+    break;
+
+  case 28:
+
+/* Line 1455 of yacc.c  */
+#line 192 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFAULT);
+                                       _asn1_set_value((yyval.node),(yyvsp[(2) - (2)].str),strlen((yyvsp[(2) - (2)].str))+1);}
+    break;
+
+  case 29:
+
+/* Line 1455 of yacc.c  */
+#line 194 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFAULT|CONST_TRUE);}
+    break;
+
+  case 30:
+
+/* Line 1455 of yacc.c  */
+#line 195 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFAULT|CONST_FALSE);}
+    break;
+
+  case 33:
+
+/* Line 1455 of yacc.c  */
+#line 204 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER);}
+    break;
+
+  case 34:
+
+/* Line 1455 of yacc.c  */
+#line 205 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_LIST);
+                                        _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 35:
+
+/* Line 1455 of yacc.c  */
+#line 207 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER);}
+    break;
+
+  case 36:
+
+/* Line 1455 of yacc.c  */
+#line 209 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_MIN_MAX);
+                                         _asn1_set_down((yyval.node),_asn1_add_node(TYPE_SIZE));
+                                         _asn1_set_value(_asn1_get_down((yyval.node)),(yyvsp[(6) - (7)].str),strlen((yyvsp[(6) - (7)].str))+1);
+                                         _asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[(3) - (7)].str));}
+    break;
+
+  case 37:
+
+/* Line 1455 of yacc.c  */
+#line 215 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BOOLEAN);}
+    break;
+
+  case 38:
+
+/* Line 1455 of yacc.c  */
+#line 218 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TIME|CONST_UTC);}
+    break;
+
+  case 39:
+
+/* Line 1455 of yacc.c  */
+#line 219 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TIME|CONST_GENERALIZED);}
+    break;
+
+  case 40:
+
+/* Line 1455 of yacc.c  */
+#line 222 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SIZE|CONST_1_PARAM);
+                                     _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 41:
+
+/* Line 1455 of yacc.c  */
+#line 225 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SIZE|CONST_MIN_MAX);
+                                     _asn1_set_value((yyval.node),(yyvsp[(3) - (7)].str),strlen((yyvsp[(3) - (7)].str))+1);
+                                      _asn1_set_name((yyval.node),(yyvsp[(6) - (7)].str));}
+    break;
+
+  case 42:
+
+/* Line 1455 of yacc.c  */
+#line 230 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 43:
+
+/* Line 1455 of yacc.c  */
+#line 231 "ASN1.y"
+    {(yyval.node)=(yyvsp[(2) - (3)].node);}
+    break;
+
+  case 44:
+
+/* Line 1455 of yacc.c  */
+#line 234 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_GENERALSTRING);}
+    break;
+
+  case 45:
+
+/* Line 1455 of yacc.c  */
+#line 235 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_GENERALSTRING|CONST_SIZE);
+                                         _asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 46:
+
+/* Line 1455 of yacc.c  */
+#line 239 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OCTET_STRING);}
+    break;
+
+  case 47:
+
+/* Line 1455 of yacc.c  */
+#line 240 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OCTET_STRING|CONST_SIZE);
+                                           _asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 48:
+
+/* Line 1455 of yacc.c  */
+#line 244 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                  _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                                    _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 49:
+
+/* Line 1455 of yacc.c  */
+#line 249 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 50:
+
+/* Line 1455 of yacc.c  */
+#line 250 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (3)].node);
+                                                       _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 51:
+
+/* Line 1455 of yacc.c  */
+#line 254 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING);}
+    break;
+
+  case 52:
+
+/* Line 1455 of yacc.c  */
+#line 255 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING|CONST_SIZE);}
+    break;
+
+  case 53:
+
+/* Line 1455 of yacc.c  */
+#line 257 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING|CONST_LIST);
+                                _asn1_set_down((yyval.node),(yyvsp[(4) - (5)].node));}
+    break;
+
+  case 54:
+
+/* Line 1455 of yacc.c  */
+#line 262 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_ENUMERATED|CONST_LIST);
+                                _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 55:
+
+/* Line 1455 of yacc.c  */
+#line 267 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);}
+    break;
+
+  case 56:
+
+/* Line 1455 of yacc.c  */
+#line 270 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_IDENTIFIER);
+                                       _asn1_set_value((yyval.node),(yyvsp[(1) - (1)].str),strlen((yyvsp[(1) - (1)].str))+1);}
+    break;
+
+  case 57:
+
+/* Line 1455 of yacc.c  */
+#line 272 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_IDENTIFIER|CONST_SIZE);
+                                       _asn1_set_value((yyval.node),(yyvsp[(1) - (2)].str),strlen((yyvsp[(1) - (2)].str))+1);
+                                       _asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 58:
+
+/* Line 1455 of yacc.c  */
+#line 275 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 59:
+
+/* Line 1455 of yacc.c  */
+#line 276 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 60:
+
+/* Line 1455 of yacc.c  */
+#line 277 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 62:
+
+/* Line 1455 of yacc.c  */
+#line 279 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 63:
+
+/* Line 1455 of yacc.c  */
+#line 280 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 64:
+
+/* Line 1455 of yacc.c  */
+#line 281 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 65:
+
+/* Line 1455 of yacc.c  */
+#line 282 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 66:
+
+/* Line 1455 of yacc.c  */
+#line 283 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 67:
+
+/* Line 1455 of yacc.c  */
+#line 284 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 68:
+
+/* Line 1455 of yacc.c  */
+#line 285 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 69:
+
+/* Line 1455 of yacc.c  */
+#line 286 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 70:
+
+/* Line 1455 of yacc.c  */
+#line 287 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_NULL);}
+    break;
+
+  case 71:
+
+/* Line 1455 of yacc.c  */
+#line 290 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 72:
+
+/* Line 1455 of yacc.c  */
+#line 291 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(2) - (2)].node),CONST_TAG);
+                                               _asn1_set_right((yyvsp[(1) - (2)].node),_asn1_get_down((yyval.node)));
+                                               _asn1_set_down((yyval.node),(yyvsp[(1) - (2)].node));}
+    break;
+
+  case 73:
+
+/* Line 1455 of yacc.c  */
+#line 296 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 74:
+
+/* Line 1455 of yacc.c  */
+#line 297 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_DEFAULT);
+                                                       _asn1_set_right((yyvsp[(2) - (2)].node),_asn1_get_down((yyval.node)));
+                                                      _asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 75:
+
+/* Line 1455 of yacc.c  */
+#line 300 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_OPTION);}
+    break;
+
+  case 76:
+
+/* Line 1455 of yacc.c  */
+#line 303 "ASN1.y"
+    {(yyval.node)=_asn1_set_name((yyvsp[(2) - (2)].node),(yyvsp[(1) - (2)].str));}
+    break;
+
+  case 77:
+
+/* Line 1455 of yacc.c  */
+#line 306 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 78:
+
+/* Line 1455 of yacc.c  */
+#line 307 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (3)].node);
+                                                _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 79:
+
+/* Line 1455 of yacc.c  */
+#line 311 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE);
+                                              _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 80:
+
+/* Line 1455 of yacc.c  */
+#line 313 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE_OF);
+                                              _asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 81:
+
+/* Line 1455 of yacc.c  */
+#line 315 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE_OF|CONST_SIZE);
+                                            _asn1_set_right((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node));
+                                            _asn1_set_down((yyval.node),(yyvsp[(2) - (4)].node));}
+    break;
+
+  case 82:
+
+/* Line 1455 of yacc.c  */
+#line 320 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SET);
+                                     _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 83:
+
+/* Line 1455 of yacc.c  */
+#line 322 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SET_OF);
+                                     _asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 84:
+
+/* Line 1455 of yacc.c  */
+#line 324 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SET_OF|CONST_SIZE);
+                                       _asn1_set_right((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node));
+                                       _asn1_set_down((yyval.node),(yyvsp[(2) - (4)].node));}
+    break;
+
+  case 85:
+
+/* Line 1455 of yacc.c  */
+#line 329 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CHOICE);
+                                             _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 86:
+
+/* Line 1455 of yacc.c  */
+#line 333 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_ANY);}
+    break;
+
+  case 87:
+
+/* Line 1455 of yacc.c  */
+#line 334 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_ANY|CONST_DEFINED_BY);
+                                        _asn1_set_down((yyval.node),_asn1_add_node(TYPE_CONSTANT));
+                                       _asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[(4) - (4)].str));}
+    break;
+
+  case 88:
+
+/* Line 1455 of yacc.c  */
+#line 339 "ASN1.y"
+    {(yyval.node)=_asn1_set_name((yyvsp[(3) - (3)].node),(yyvsp[(1) - (3)].str));}
+    break;
+
+  case 89:
+
+/* Line 1455 of yacc.c  */
+#line 343 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN);
+                         _asn1_set_name((yyval.node),(yyvsp[(1) - (7)].str));
+                         _asn1_set_down((yyval.node),(yyvsp[(6) - (7)].node));}
+    break;
+
+  case 90:
+
+/* Line 1455 of yacc.c  */
+#line 347 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN|CONST_1_PARAM);
+                         _asn1_set_name((yyval.node),(yyvsp[(1) - (6)].str));
+                         _asn1_set_value((yyval.node),(yyvsp[(2) - (6)].str),strlen((yyvsp[(2) - (6)].str))+1);
+                         _asn1_set_down((yyval.node),(yyvsp[(5) - (6)].node));}
+    break;
+
+  case 91:
+
+/* Line 1455 of yacc.c  */
+#line 352 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_ASSIGN);
+                         _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                         _asn1_set_value((yyval.node),(yyvsp[(4) - (4)].str),strlen((yyvsp[(4) - (4)].str))+1);}
+    break;
+
+  case 92:
+
+/* Line 1455 of yacc.c  */
+#line 357 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 93:
+
+/* Line 1455 of yacc.c  */
+#line 358 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 94:
+
+/* Line 1455 of yacc.c  */
+#line 361 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 95:
+
+/* Line 1455 of yacc.c  */
+#line 362 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (2)].node);
+                                                          _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (2)].node)),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 96:
+
+/* Line 1455 of yacc.c  */
+#line 366 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);
+                                                          _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));
+                                                          _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));}
+    break;
+
+  case 97:
+
+/* Line 1455 of yacc.c  */
+#line 369 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);
+                                                          _asn1_set_name((yyval.node),(yyvsp[(1) - (3)].str));}
+    break;
+
+  case 98:
+
+/* Line 1455 of yacc.c  */
+#line 393 "ASN1.y"
+    {(yyval.constant)=CONST_EXPLICIT;}
+    break;
+
+  case 99:
+
+/* Line 1455 of yacc.c  */
+#line 394 "ASN1.y"
+    {(yyval.constant)=CONST_IMPLICIT;}
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 2371 "ASN1.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &amp;yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate &amp;& yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize &amp;& yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc &amp;& yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize &amp;& yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &amp;yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn &amp;& yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &amp;yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_expand_object_id_src', '_asn1_expand_object_id_button')"><span id="_asn1_expand_object_id_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_expand_object_id
+</td>
+<td class="function_entry_cyclo">
+44
+</td>
+<td class="function_entry_number">
+95
+</td>
+<td class="function_entry_number">
+169
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_expand_object_id_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_expand_object_id (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2, p3, p4, p5;
+  char name_root[ASN1_MAX_NAME_SIZE], name2[2 * ASN1_MAX_NAME_SIZE + 1];
+  int move, tlen;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  _asn1_str_cpy (name_root, sizeof (name_root), node->name);
+
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) &amp;& (move == UP)))
+    {
+      if (move != UP)
+       {
+         if ((type_field (p->type) == TYPE_OBJECT_ID)
+             &amp;& (p->type & CONST_ASSIGN))
+           {
+             p2 = p->down;
+             if (p2 &amp;& (type_field (p2->type) == TYPE_CONSTANT))
+               {
+                 if (p2->value &amp;& !isdigit (p2->value[0]))
+                   {
+                     _asn1_str_cpy (name2, sizeof (name2), name_root);
+                     _asn1_str_cat (name2, sizeof (name2), ".");
+                     _asn1_str_cat (name2, sizeof (name2), p2->value);
+                     p3 = asn1_find_node (node, name2);
+                     if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                         !(p3->type &amp; CONST_ASSIGN))
+                       return ASN1_ELEMENT_NOT_FOUND;
+                     _asn1_set_down (p, p2->right);
+                     _asn1_remove_node (p2);
+                     p2 = p;
+                     p4 = p3->down;
+                     while (p4)
+                       {
+                         if (type_field (p4->type) == TYPE_CONSTANT)
+                           {
+                             p5 = _asn1_add_node_only (TYPE_CONSTANT);
+                             _asn1_set_name (p5, p4->name);
+                             tlen = strlen (p4->value);
+                             if (tlen > 0)
+                               _asn1_set_value (p5, p4->value, tlen + 1);
+                             if (p2 == p)
+                               {
+                                 _asn1_set_right (p5, p->down);
+                                 _asn1_set_down (p, p5);
+                               }
+                             else
+                               {
+                                 _asn1_set_right (p5, p2->right);
+                                 _asn1_set_right (p2, p5);
+                               }
+                             p2 = p5;
+                           }
+                         p4 = p4->right;
+                       }
+                     move = DOWN;
+                     continue;
+                   }
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+
+  /*******************************/
+  /*       expand DEFAULT        */
+  /*******************************/
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) &amp;& (move == UP)))
+    {
+      if (move != UP)
+       {
+         if ((type_field (p->type) == TYPE_OBJECT_ID) &amp;&
+             (p->type &amp; CONST_DEFAULT))
+           {
+             p2 = p->down;
+             if (p2 &amp;& (type_field (p2->type) == TYPE_DEFAULT))
+               {
+                 _asn1_str_cpy (name2, sizeof (name2), name_root);
+                 _asn1_str_cat (name2, sizeof (name2), ".");
+                 _asn1_str_cat (name2, sizeof (name2), p2->value);
+                 p3 = asn1_find_node (node, name2);
+                 if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                     !(p3->type &amp; CONST_ASSIGN))
+                   return ASN1_ELEMENT_NOT_FOUND;
+                 p4 = p3->down;
+                 name2[0] = 0;
+                 while (p4)
+                   {
+                     if (type_field (p4->type) == TYPE_CONSTANT)
+                       {
+                         if (name2[0])
+                           _asn1_str_cat (name2, sizeof (name2), ".");
+                         _asn1_str_cat (name2, sizeof (name2), p4->value);
+                       }
+                     p4 = p4->right;
+                   }
+                 tlen = strlen (name2);
+                 if (tlen > 0)
+                   _asn1_set_value (p2, name2, tlen + 1);
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_yylex_src', '_asn1_yylex_button')"><span id="_asn1_yylex_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_yylex
+</td>
+<td class="function_entry_cyclo">
+44
+</td>
+<td class="function_entry_number">
+54
+</td>
+<td class="function_entry_number">
+80
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_yylex_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static int
+_asn1_yylex()
+{
+  int c,counter=0,k,lastc;
+  char string[ASN1_MAX_NAME_SIZE+1]; /* will contain the next token */
+  size_t i;
+
+  while(1)
+    {
+    while((c=fgetc(file_asn1))==' ' || c=='\t' || c=='\n')
+      if(c=='\n') lineNumber++;
+
+    if(c==EOF){
+      strcpy(lastToken,"End Of File");
+      return 0;
+    }
+
+    if(c=='(' || c==')' || c=='[' || c==']' ||
+       c=='{' || c=='}' || c==',' || c=='.' ||
+       c=='+' || c=='|'){
+      lastToken[0]=c;lastToken[1]=0;
+      return c;
+    }
+    if(c=='-'){  /* Maybe the first '-' of a comment */
+      if((c=fgetc(file_asn1))!='-'){
+       ungetc(c,file_asn1);
+       lastToken[0]='-';lastToken[1]=0;
+       return '-';
+      }
+      else{ /* Comments */
+       lastc=0;
+       counter=0;
+       /* A comment finishes at the next double hypen or the end of line */
+       while((c=fgetc(file_asn1))!=EOF &amp;& c!='\n' &&
+             (lastc!='-' || (lastc=='-' &amp;& c!='-')))
+         lastc=c;
+       if(c==EOF){
+         strcpy(lastToken,"End Of File");
+         return 0;
+       }
+       else{
+         if(c=='\n') lineNumber++;
+         continue; /* next char, please! (repeat the search) */
+       }
+      }
+    }
+    string[counter++]=c;
+    /* Till the end of the token */
+    while(!((c=fgetc(file_asn1))==EOF || c==' '|| c=='\t' || c=='\n' ||
+            c=='(' || c==')' || c=='[' || c==']' ||
+            c=='{' || c=='}' || c==',' || c=='.'))
+      {
+       if(counter>=ASN1_MAX_NAME_SIZE){
+         result_parse=ASN1_NAME_TOO_LONG;
+         return 0;
+       }
+       string[counter++]=c;
+      }
+    ungetc(c,file_asn1);
+    string[counter]=0;
+    strcpy(lastToken,string);
+
+    /* Is STRING a number? */
+    for(k=0;k<counter;k++)
+      if(!isdigit(string[k])) break;
+    if(k>=counter)
+      {
+      strcpy(yylval.str,string);
+      return NUM; /* return the number */
+      }
+
+    /* Is STRING a keyword? */
+    for(i=0;i<(sizeof(key_word)/sizeof(char*));i++)
+      if(!strcmp(string,key_word[i])) return key_word_token[i];
+
+    /* STRING is an IDENTIFIER */
+    strcpy(yylval.str,string);
+    return IDENTIFIER;
+    }
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_expand_any_defined_by_src', 'asn1_expand_any_defined_by_button')"><span id="asn1_expand_any_defined_by_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_expand_any_defined_by
+</td>
+<td class="function_entry_cyclo">
+43
+</td>
+<td class="function_entry_number">
+101
+</td>
+<td class="function_entry_number">
+211
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_expand_any_defined_by_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_expand_any_defined_by (ASN1_TYPE definitions, ASN1_TYPE * element)
+{
+  char definitionsName[ASN1_MAX_NAME_SIZE], name[2 * ASN1_MAX_NAME_SIZE + 1],
+    value[ASN1_MAX_NAME_SIZE];
+  asn1_retCode retCode = ASN1_SUCCESS, result;
+  int len, len2, len3;
+  ASN1_TYPE p, p2, p3, aux = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  if ((definitions == ASN1_TYPE_EMPTY) || (*element == ASN1_TYPE_EMPTY))
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  strcpy (definitionsName, definitions->name);
+  strcat (definitionsName, ".");
+
+  p = *element;
+  while (p)
+    {
+
+      switch (type_field (p->type))
+       {
+       case TYPE_ANY:
+         if ((p->type &amp; CONST_DEFINED_BY) && (p->value))
+           {
+             /* search the "DEF_BY" element */
+             p2 = p->down;
+             while ((p2) &amp;& (type_field (p2->type) != TYPE_CONSTANT))
+               p2 = p2->right;
+
+             if (!p2)
+               {
+                 retCode = ASN1_ERROR_TYPE_ANY;
+                 break;
+               }
+
+             p3 = _asn1_find_up (p);
+
+             if (!p3)
+               {
+                 retCode = ASN1_ERROR_TYPE_ANY;
+                 break;
+               }
+
+             p3 = p3->down;
+             while (p3)
+               {
+                 if ((p3->name) &amp;& !(strcmp (p3->name, p2->name)))
+                   break;
+                 p3 = p3->right;
+               }
+
+             if ((!p3) || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                 (p3->value == NULL))
+               {
+
+                 p3 = _asn1_find_up (p);
+                 p3 = _asn1_find_up (p3);
+
+                 if (!p3)
+                   {
+                     retCode = ASN1_ERROR_TYPE_ANY;
+                     break;
+                   }
+
+                 p3 = p3->down;
+
+                 while (p3)
+                   {
+                     if ((p3->name) &amp;& !(strcmp (p3->name, p2->name)))
+                       break;
+                     p3 = p3->right;
+                   }
+
+                 if ((!p3) || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                     (p3->value == NULL))
+                   {
+                     retCode = ASN1_ERROR_TYPE_ANY;
+                     break;
+                   }
+               }
+
+             /* search the OBJECT_ID into definitions */
+             p2 = definitions->down;
+             while (p2)
+               {
+                 if ((type_field (p2->type) == TYPE_OBJECT_ID) &amp;&
+                     (p2->type &amp; CONST_ASSIGN))
+                   {
+                     strcpy (name, definitionsName);
+                     strcat (name, p2->name);
+
+                     len = ASN1_MAX_NAME_SIZE;
+                     result =
+                       asn1_read_value (definitions, name, value, &amp;len);
+
+                     if ((result == ASN1_SUCCESS)
+                         &amp;& (!strcmp (p3->value, value)))
+                       {
+                         p2 = p2->right;       /* pointer to the structure to
+                                                  use for expansion */
+                         while ((p2) &amp;& (p2->type & CONST_ASSIGN))
+                           p2 = p2->right;
+
+                         if (p2)
+                           {
+                             strcpy (name, definitionsName);
+                             strcat (name, p2->name);
+
+                             result =
+                               asn1_create_element (definitions, name, &amp;aux);
+                             if (result == ASN1_SUCCESS)
+                               {
+                                 _asn1_set_name (aux, p->name);
+                                 len2 =
+                                   asn1_get_length_der (p->value,
+                                                        p->value_len, &amp;len3);
+                                 if (len2 < 0)
+                                   return ASN1_DER_ERROR;
+
+                                 result =
+                                   asn1_der_decoding (&amp;aux, p->value + len3,
+                                                      len2,
+                                                      errorDescription);
+                                 if (result == ASN1_SUCCESS)
+                                   {
+
+                                     _asn1_set_right (aux, p->right);
+                                     _asn1_set_right (p, aux);
+
+                                     result = asn1_delete_structure (&amp;p);
+                                     if (result == ASN1_SUCCESS)
+                                       {
+                                         p = aux;
+                                         aux = ASN1_TYPE_EMPTY;
+                                         break;
+                                       }
+                                     else
+                                       {       /* error with asn1_delete_structure */
+                                         asn1_delete_structure (&amp;aux);
+                                         retCode = result;
+                                         break;
+                                       }
+                                   }
+                                 else
+                                   {   /* error with asn1_der_decoding */
+                                     retCode = result;
+                                     break;
+                                   }
+                               }
+                             else
+                               {       /* error with asn1_create_element */
+                                 retCode = result;
+                                 break;
+                               }
+                           }
+                         else
+                           {   /* error with the pointer to the structure to exapand */
+                             retCode = ASN1_ERROR_TYPE_ANY;
+                             break;
+                           }
+                       }
+                   }
+                 p2 = p2->right;
+               }               /* end while */
+
+             if (!p2)
+               {
+                 retCode = ASN1_ERROR_TYPE_ANY;
+                 break;
+               }
+
+           }
+         break;
+       default:
+         break;
+       }
+
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p == *element)
+       {
+         p = NULL;
+         break;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == *element)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  return retCode;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_read_value_src', 'asn1_read_value_button')"><span id="asn1_read_value_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_read_value
+</td>
+<td class="function_entry_cyclo">
+47
+</td>
+<td class="function_entry_number">
+83
+</td>
+<td class="function_entry_number">
+161
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_read_value_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_read_value (ASN1_TYPE root, const char *name, void *ivalue, int *len)
+{
+  ASN1_TYPE node, p, p2;
+  int len2, len3;
+  int value_size = *len;
+  unsigned char *value = ivalue;
+
+  node = asn1_find_node (root, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if ((type_field (node->type) != TYPE_NULL) &amp;&
+      (type_field (node->type) != TYPE_CHOICE) &amp;&
+      !(node->type &amp; CONST_DEFAULT) && !(node->type & CONST_ASSIGN) &&
+      (node->value == NULL))
+    return ASN1_VALUE_NOT_FOUND;
+
+  switch (type_field (node->type))
+    {
+    case TYPE_NULL:
+      PUT_STR_VALUE (value, value_size, "NULL");
+      break;
+    case TYPE_BOOLEAN:
+      if ((node->type &amp; CONST_DEFAULT) && (node->value == NULL))
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if (p->type &amp; CONST_TRUE)
+           {
+             PUT_STR_VALUE (value, value_size, "TRUE");
+           }
+         else
+           {
+             PUT_STR_VALUE (value, value_size, "FALSE");
+           }
+       }
+      else if (node->value[0] == 'T')
+       {
+         PUT_STR_VALUE (value, value_size, "TRUE");
+       }
+      else
+       {
+         PUT_STR_VALUE (value, value_size, "FALSE");
+       }
+      break;
+    case TYPE_INTEGER:
+    case TYPE_ENUMERATED:
+      if ((node->type &amp; CONST_DEFAULT) && (node->value == NULL))
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if ((isdigit (p->value[0])) || (p->value[0] == '-')
+             || (p->value[0] == '+'))
+           {
+             if (_asn1_convert_integer
+                 (p->value, value, value_size, len) != ASN1_SUCCESS)
+               return ASN1_MEM_ERROR;
+           }
+         else
+           {                   /* is an identifier like v1 */
+             p2 = node->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) == TYPE_CONSTANT)
+                   {
+                     if ((p2->name) &amp;& (!strcmp (p2->name, p->value)))
+                       {
+                         if (_asn1_convert_integer
+                             (p2->value, value, value_size,
+                              len) != ASN1_SUCCESS)
+                           return ASN1_MEM_ERROR;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+           }
+       }
+      else
+       {
+         len2 = -1;
+         if (asn1_get_octet_der
+             (node->value, node->value_len, &amp;len2, value, value_size,
+              len) != ASN1_SUCCESS)
+           return ASN1_MEM_ERROR;
+       }
+      break;
+    case TYPE_OBJECT_ID:
+      if (node->type &amp; CONST_ASSIGN)
+       {
+         value[0] = 0;
+         p = node->down;
+         while (p)
+           {
+             if (type_field (p->type) == TYPE_CONSTANT)
+               {
+                 ADD_STR_VALUE (value, value_size, p->value);
+                 if (p->right)
+                   {
+                     ADD_STR_VALUE (value, value_size, ".");
+                   }
+               }
+             p = p->right;
+           }
+         *len = strlen (value) + 1;
+       }
+      else if ((node->type &amp; CONST_DEFAULT) && (node->value == NULL))
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         PUT_STR_VALUE (value, value_size, p->value);
+       }
+      else
+       {
+         PUT_STR_VALUE (value, value_size, node->value);
+       }
+      break;
+    case TYPE_TIME:
+      PUT_STR_VALUE (value, value_size, node->value);
+      break;
+    case TYPE_OCTET_STRING:
+      len2 = -1;
+      if (asn1_get_octet_der
+         (node->value, node->value_len, &amp;len2, value, value_size,
+          len) != ASN1_SUCCESS)
+       return ASN1_MEM_ERROR;
+      break;
+    case TYPE_GENERALSTRING:
+      len2 = -1;
+      if (asn1_get_octet_der
+         (node->value, node->value_len, &amp;len2, value, value_size,
+          len) != ASN1_SUCCESS)
+       return ASN1_MEM_ERROR;
+      break;
+    case TYPE_BIT_STRING:
+      len2 = -1;
+      if (asn1_get_bit_der
+         (node->value, node->value_len, &amp;len2, value, value_size,
+          len) != ASN1_SUCCESS)
+       return ASN1_MEM_ERROR;
+      break;
+    case TYPE_CHOICE:
+      PUT_STR_VALUE (value, value_size, node->down->name);
+      break;
+    case TYPE_ANY:
+      len3 = -1;
+      len2 = asn1_get_length_der (node->value, node->value_len, &amp;len3);
+      if (len2 < 0)
+       return ASN1_DER_ERROR;
+      PUT_VALUE (value, value_size, node->value + len3, len2);
+      break;
+    default:
+      return ASN1_ELEMENT_NOT_FOUND;
+      break;
+    }
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_check_identifier_src', '_asn1_check_identifier_button')"><span id="_asn1_check_identifier_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_check_identifier
+</td>
+<td class="function_entry_cyclo">
+26
+</td>
+<td class="function_entry_number">
+50
+</td>
+<td class="function_entry_number">
+91
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_check_identifier_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_check_identifier (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+  char name2[ASN1_MAX_NAME_SIZE * 2 + 2];
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if (type_field (p->type) == TYPE_IDENTIFIER)
+       {
+         _asn1_str_cpy (name2, sizeof (name2), node->name);
+         _asn1_str_cat (name2, sizeof (name2), ".");
+         _asn1_str_cat (name2, sizeof (name2), p->value);
+         p2 = asn1_find_node (node, name2);
+         if (p2 == NULL)
+           {
+             strcpy (_asn1_identifierMissing, p->value);
+             return ASN1_IDENTIFIER_NOT_FOUND;
+           }
+       }
+      else if ((type_field (p->type) == TYPE_OBJECT_ID) &amp;&
+              (p->type &amp; CONST_DEFAULT))
+       {
+         p2 = p->down;
+         if (p2 &amp;& (type_field (p2->type) == TYPE_DEFAULT))
+           {
+             _asn1_str_cpy (name2, sizeof (name2), node->name);
+             _asn1_str_cat (name2, sizeof (name2), ".");
+             _asn1_str_cat (name2, sizeof (name2), p2->value);
+             strcpy (_asn1_identifierMissing, p2->value);
+             p2 = asn1_find_node (node, name2);
+             if (!p2 || (type_field (p2->type) != TYPE_OBJECT_ID) ||
+                 !(p2->type &amp; CONST_ASSIGN))
+               return ASN1_IDENTIFIER_NOT_FOUND;
+             else
+               _asn1_identifierMissing[0] = 0;
+           }
+       }
+      else if ((type_field (p->type) == TYPE_OBJECT_ID) &amp;&
+              (p->type &amp; CONST_ASSIGN))
+       {
+         p2 = p->down;
+         if (p2 &amp;& (type_field (p2->type) == TYPE_CONSTANT))
+           {
+             if (p2->value &amp;& !isdigit (p2->value[0]))
+               {
+                 _asn1_str_cpy (name2, sizeof (name2), node->name);
+                 _asn1_str_cat (name2, sizeof (name2), ".");
+                 _asn1_str_cat (name2, sizeof (name2), p2->value);
+                 strcpy (_asn1_identifierMissing, p2->value);
+                 p2 = asn1_find_node (node, name2);
+                 if (!p2 || (type_field (p2->type) != TYPE_OBJECT_ID) ||
+                     !(p2->type &amp; CONST_ASSIGN))
+                   return ASN1_IDENTIFIER_NOT_FOUND;
+                 else
+                   _asn1_identifierMissing[0] = 0;
+               }
+           }
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == node)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_expand_identifier_src', '_asn1_expand_identifier_button')"><span id="_asn1_expand_identifier_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_expand_identifier
+</td>
+<td class="function_entry_cyclo">
+25
+</td>
+<td class="function_entry_number">
+68
+</td>
+<td class="function_entry_number">
+107
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_expand_identifier_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static asn1_retCode
+_asn1_expand_identifier (ASN1_TYPE * node, ASN1_TYPE root)
+{
+  ASN1_TYPE p, p2, p3;
+  char name2[ASN1_MAX_NAME_SIZE + 2];
+  int move;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = *node;
+  move = DOWN;
+
+  while (!((p == *node) &amp;& (move == UP)))
+    {
+      if (move != UP)
+       {
+         if (type_field (p->type) == TYPE_IDENTIFIER)
+           {
+             _asn1_str_cpy (name2, sizeof (name2), root->name);
+             _asn1_str_cat (name2, sizeof (name2), ".");
+             _asn1_str_cat (name2, sizeof (name2), p->value);
+             p2 = _asn1_copy_structure2 (root, name2);
+             if (p2 == NULL)
+               {
+                 return ASN1_IDENTIFIER_NOT_FOUND;
+               }
+             _asn1_set_name (p2, p->name);
+             p2->right = p->right;
+             p2->left = p->left;
+             if (p->right)
+               p->right->left = p2;
+             p3 = p->down;
+             if (p3)
+               {
+                 while (p3->right)
+                   p3 = p3->right;
+                 _asn1_set_right (p3, p2->down);
+                 _asn1_set_down (p2, p->down);
+               }
+
+             p3 = _asn1_find_left (p);
+             if (p3)
+               _asn1_set_right (p3, p2);
+             else
+               {
+                 p3 = _asn1_find_up (p);
+                 if (p3)
+                   _asn1_set_down (p3, p2);
+                 else
+                   {
+                     p2->left = NULL;
+                   }
+               }
+
+             if (p->type &amp; CONST_SIZE)
+               p2->type |= CONST_SIZE;
+             if (p->type &amp; CONST_TAG)
+               p2->type |= CONST_TAG;
+             if (p->type &amp; CONST_OPTION)
+               p2->type |= CONST_OPTION;
+             if (p->type &amp; CONST_DEFAULT)
+               p2->type |= CONST_DEFAULT;
+             if (p->type &amp; CONST_SET)
+               p2->type |= CONST_SET;
+             if (p->type &amp; CONST_NOT_USED)
+               p2->type |= CONST_NOT_USED;
+
+             if (p == *node)
+               *node = p2;
+             _asn1_remove_node (p);
+             p = p2;
+             move = DOWN;
+             continue;
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == *node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_ordering_set_of_src', '_asn1_ordering_set_of_button')"><span id="_asn1_ordering_set_of_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_ordering_set_of
+</td>
+<td class="function_entry_cyclo">
+23
+</td>
+<td class="function_entry_number">
+72
+</td>
+<td class="function_entry_number">
+124
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_ordering_set_of_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static void
+_asn1_ordering_set_of (unsigned char *der, int der_len, ASN1_TYPE node)
+{
+  struct vet
+  {
+    int end;
+    struct vet *next, *prev;
+  };
+
+  int counter, len, len2, change;
+  struct vet *first, *last, *p_vet, *p2_vet;
+  ASN1_TYPE p;
+  unsigned char *temp, class;
+  unsigned long k, max;
+
+  counter = 0;
+
+  if (type_field (node->type) != TYPE_SET_OF)
+    return;
+
+  p = node->down;
+  while ((type_field (p->type) == TYPE_TAG)
+        || (type_field (p->type) == TYPE_SIZE))
+    p = p->right;
+  p = p->right;
+
+  if ((p == NULL) || (p->right == NULL))
+    return;
+
+  first = last = NULL;
+  while (p)
+    {
+      p_vet = (struct vet *) _asn1_malloc (sizeof (struct vet));
+      if (p_vet == NULL)
+       return;
+
+      p_vet->next = NULL;
+      p_vet->prev = last;
+      if (first == NULL)
+       first = p_vet;
+      else
+       last->next = p_vet;
+      last = p_vet;
+
+      /* extraction of tag and length */
+      if (der_len - counter > 0)
+       {
+
+         if (asn1_get_tag_der
+             (der + counter, der_len - counter, &amp;class, &len,
+              NULL) != ASN1_SUCCESS)
+           return;
+         counter += len;
+
+         len2 = asn1_get_length_der (der + counter, der_len - counter, &amp;len);
+         if (len2 < 0)
+           return;
+         counter += len + len2;
+       }
+
+      p_vet->end = counter;
+      p = p->right;
+    }
+
+  p_vet = first;
+
+  while (p_vet)
+    {
+      p2_vet = p_vet->next;
+      counter = 0;
+      while (p2_vet)
+       {
+         if ((p_vet->end - counter) > (p2_vet->end - p_vet->end))
+           max = p_vet->end - counter;
+         else
+           max = p2_vet->end - p_vet->end;
+
+         change = -1;
+         for (k = 0; k < max; k++)
+           if (der[counter + k] > der[p_vet->end + k])
+             {
+               change = 1;
+               break;
+             }
+           else if (der[counter + k] < der[p_vet->end + k])
+             {
+               change = 0;
+               break;
+             }
+
+         if ((change == -1)
+             &amp;& ((p_vet->end - counter) > (p2_vet->end - p_vet->end)))
+           change = 1;
+
+         if (change == 1)
+           {
+             /* change position */
+             temp = (unsigned char *) _asn1_malloc (p_vet->end - counter);
+             if (temp == NULL)
+               return;
+
+             memcpy (temp, der + counter, (p_vet->end) - counter);
+             memcpy (der + counter, der + (p_vet->end),
+                     (p2_vet->end) - (p_vet->end));
+             memcpy (der + counter + (p2_vet->end) - (p_vet->end), temp,
+                     (p_vet->end) - counter);
+             _asn1_free (temp);
+
+             p_vet->end = counter + (p2_vet->end - p_vet->end);
+           }
+         counter = p_vet->end;
+
+         p2_vet = p2_vet->next;
+         p_vet = p_vet->next;
+       }
+
+      if (p_vet != first)
+       p_vet->prev->next = NULL;
+      else
+       first = NULL;
+      _asn1_free (p_vet);
+      p_vet = first;
+    }
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_expand_octet_string_src', 'asn1_expand_octet_string_button')"><span id="asn1_expand_octet_string_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_expand_octet_string
+</td>
+<td class="function_entry_cyclo">
+22
+</td>
+<td class="function_entry_number">
+65
+</td>
+<td class="function_entry_number">
+123
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_expand_octet_string_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_expand_octet_string (ASN1_TYPE definitions, ASN1_TYPE * element,
+                         const char *octetName, const char *objectName)
+{
+  char name[2 * ASN1_MAX_NAME_SIZE + 1], value[ASN1_MAX_NAME_SIZE];
+  asn1_retCode retCode = ASN1_SUCCESS, result;
+  int len, len2, len3;
+  ASN1_TYPE p2, aux = ASN1_TYPE_EMPTY;
+  ASN1_TYPE octetNode = ASN1_TYPE_EMPTY, objectNode = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  if ((definitions == ASN1_TYPE_EMPTY) || (*element == ASN1_TYPE_EMPTY))
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  octetNode = asn1_find_node (*element, octetName);
+  if (octetNode == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+  if (type_field (octetNode->type) != TYPE_OCTET_STRING)
+    return ASN1_ELEMENT_NOT_FOUND;
+  if (octetNode->value == NULL)
+    return ASN1_VALUE_NOT_FOUND;
+
+  objectNode = asn1_find_node (*element, objectName);
+  if (objectNode == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (type_field (objectNode->type) != TYPE_OBJECT_ID)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (objectNode->value == NULL)
+    return ASN1_VALUE_NOT_FOUND;
+
+
+  /* search the OBJECT_ID into definitions */
+  p2 = definitions->down;
+  while (p2)
+    {
+      if ((type_field (p2->type) == TYPE_OBJECT_ID) &amp;&
+         (p2->type &amp; CONST_ASSIGN))
+       {
+         strcpy (name, definitions->name);
+         strcat (name, ".");
+         strcat (name, p2->name);
+
+         len = sizeof (value);
+         result = asn1_read_value (definitions, name, value, &amp;len);
+
+         if ((result == ASN1_SUCCESS)
+             &amp;& (!strcmp (objectNode->value, value)))
+           {
+
+             p2 = p2->right;   /* pointer to the structure to
+                                  use for expansion */
+             while ((p2) &amp;& (p2->type & CONST_ASSIGN))
+               p2 = p2->right;
+
+             if (p2)
+               {
+                 strcpy (name, definitions->name);
+                 strcat (name, ".");
+                 strcat (name, p2->name);
+
+                 result = asn1_create_element (definitions, name, &amp;aux);
+                 if (result == ASN1_SUCCESS)
+                   {
+                     _asn1_set_name (aux, octetNode->name);
+                     len2 =
+                       asn1_get_length_der (octetNode->value,
+                                            octetNode->value_len, &amp;len3);
+                     if (len2 < 0)
+                       return ASN1_DER_ERROR;
+
+                     result =
+                       asn1_der_decoding (&amp;aux, octetNode->value + len3,
+                                          len2, errorDescription);
+                     if (result == ASN1_SUCCESS)
+                       {
+
+                         _asn1_set_right (aux, octetNode->right);
+                         _asn1_set_right (octetNode, aux);
+
+                         result = asn1_delete_structure (&amp;octetNode);
+                         if (result == ASN1_SUCCESS)
+                           {
+                             aux = ASN1_TYPE_EMPTY;
+                             break;
+                           }
+                         else
+                           {   /* error with asn1_delete_structure */
+                             asn1_delete_structure (&amp;aux);
+                             retCode = result;
+                             break;
+                           }
+                       }
+                     else
+                       {       /* error with asn1_der_decoding */
+                         retCode = result;
+                         break;
+                       }
+                   }
+                 else
+                   {           /* error with asn1_create_element */
+                     retCode = result;
+                     break;
+                   }
+               }
+             else
+               {               /* error with the pointer to the structure to exapand */
+                 retCode = ASN1_VALUE_NOT_VALID;
+                 break;
+               }
+           }
+       }
+
+      p2 = p2->right;
+
+    }
+
+  if (!p2)
+    retCode = ASN1_VALUE_NOT_VALID;
+
+  return retCode;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_high">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_array2tree_src', 'asn1_array2tree_button')"><span id="asn1_array2tree_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_array2tree
+</td>
+<td class="function_entry_cyclo">
+21
+</td>
+<td class="function_entry_number">
+53
+</td>
+<td class="function_entry_number">
+97
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_array2tree_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_array2tree (const ASN1_ARRAY_TYPE * array, ASN1_TYPE * definitions,
+                char *errorDescription)
+{
+  ASN1_TYPE p, p_last = NULL;
+  unsigned long k;
+  int move;
+  asn1_retCode result;
+
+
+  if (*definitions != ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_EMPTY;
+
+  move = UP;
+
+  k = 0;
+  while (array[k].value || array[k].type || array[k].name)
+    {
+      p = _asn1_add_node (array[k].type &amp; (~CONST_DOWN));
+      if (array[k].name)
+       _asn1_set_name (p, array[k].name);
+      if (array[k].value)
+       _asn1_set_value (p, array[k].value, strlen (array[k].value) + 1);
+
+      if (*definitions == NULL)
+       *definitions = p;
+
+      if (move == DOWN)
+       _asn1_set_down (p_last, p);
+      else if (move == RIGHT)
+       _asn1_set_right (p_last, p);
+
+      p_last = p;
+
+      if (array[k].type &amp; CONST_DOWN)
+       move = DOWN;
+      else if (array[k].type &amp; CONST_RIGHT)
+       move = RIGHT;
+      else
+       {
+         while (1)
+           {
+             if (p_last == *definitions)
+               break;
+
+             p_last = _asn1_find_up (p_last);
+
+             if (p_last == NULL)
+               break;
+
+             if (p_last->type &amp; CONST_RIGHT)
+               {
+                 p_last->type &amp;= ~CONST_RIGHT;
+                 move = RIGHT;
+                 break;
+               }
+           }                   /* while */
+       }
+      k++;
+    }                          /* while */
+
+  if (p_last == *definitions)
+    {
+      result = _asn1_check_identifier (*definitions);
+      if (result == ASN1_SUCCESS)
+       {
+         _asn1_change_integer_value (*definitions);
+         _asn1_expand_object_id (*definitions);
+       }
+    }
+  else
+    {
+      result = ASN1_ARRAY_ERROR;
+    }
+
+  if (errorDescription != NULL)
+    {
+      if (result == ASN1_IDENTIFIER_NOT_FOUND)
+       {
+         Estrcpy (errorDescription, ":: identifier '");
+         Estrcat (errorDescription, _asn1_identifierMissing);
+         Estrcat (errorDescription, "' not found");
+       }
+      else
+       errorDescription[0] = 0;
+    }
+
+  if (result != ASN1_SUCCESS)
+    {
+      _asn1_delete_list_and_nodes ();
+      *definitions = ASN1_TYPE_EMPTY;
+    }
+  else
+    _asn1_delete_list ();
+
+  return result;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_insert_tag_der_src', '_asn1_insert_tag_der_button')"><span id="_asn1_insert_tag_der_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_insert_tag_der
+</td>
+<td class="function_entry_cyclo">
+35
+</td>
+<td class="function_entry_number">
+75
+</td>
+<td class="function_entry_number">
+151
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_insert_tag_der_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static asn1_retCode
+_asn1_insert_tag_der (ASN1_TYPE node, unsigned char *der, int *counter,
+                     int *max_len)
+{
+  ASN1_TYPE p;
+  int tag_len, is_tag_implicit;
+  unsigned char class, class_implicit = 0, temp[SIZEOF_UNSIGNED_INT * 3 + 1];
+  unsigned long tag_implicit = 0;
+  char tag_der[MAX_TAG_LEN];
+
+  is_tag_implicit = 0;
+
+  if (node->type &amp; CONST_TAG)
+    {
+      p = node->down;
+      while (p)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if (p->type &amp; CONST_APPLICATION)
+               class = ASN1_CLASS_APPLICATION;
+             else if (p->type &amp; CONST_UNIVERSAL)
+               class = ASN1_CLASS_UNIVERSAL;
+             else if (p->type &amp; CONST_PRIVATE)
+               class = ASN1_CLASS_PRIVATE;
+             else
+               class = ASN1_CLASS_CONTEXT_SPECIFIC;
+
+             if (p->type &amp; CONST_EXPLICIT)
+               {
+                 if (is_tag_implicit)
+                   _asn1_tag_der (class_implicit, tag_implicit, tag_der,
+                                  &amp;tag_len);
+                 else
+                   _asn1_tag_der (class | ASN1_CLASS_STRUCTURED,
+                                  strtoul (p->value, NULL, 10), tag_der,
+                                  &amp;tag_len);
+
+                 *max_len -= tag_len;
+                 if (*max_len >= 0)
+                   memcpy (der + *counter, tag_der, tag_len);
+                 *counter += tag_len;
+
+                 _asn1_ltostr (*counter, temp);
+                 _asn1_set_name (p, temp);
+
+                 is_tag_implicit = 0;
+               }
+             else
+               {               /* CONST_IMPLICIT */
+                 if (!is_tag_implicit)
+                   {
+                     if ((type_field (node->type) == TYPE_SEQUENCE) ||
+                         (type_field (node->type) == TYPE_SEQUENCE_OF) ||
+                         (type_field (node->type) == TYPE_SET) ||
+                         (type_field (node->type) == TYPE_SET_OF))
+                       class |= ASN1_CLASS_STRUCTURED;
+                     class_implicit = class;
+                     tag_implicit = strtoul (p->value, NULL, 10);
+                     is_tag_implicit = 1;
+                   }
+               }
+           }
+         p = p->right;
+       }
+    }
+
+  if (is_tag_implicit)
+    {
+      _asn1_tag_der (class_implicit, tag_implicit, tag_der, &amp;tag_len);
+    }
+  else
+    {
+      switch (type_field (node->type))
+       {
+       case TYPE_NULL:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_NULL, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_BOOLEAN:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_BOOLEAN, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_INTEGER:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_INTEGER, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_ENUMERATED:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_ENUMERATED, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_OBJECT_ID:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_OBJECT_ID, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_TIME:
+         if (node->type &amp; CONST_UTC)
+           {
+             _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_UTCTime, tag_der,
+                            &amp;tag_len);
+           }
+         else
+           _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALIZEDTime,
+                          tag_der, &amp;tag_len);
+         break;
+       case TYPE_OCTET_STRING:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_OCTET_STRING, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_GENERALSTRING:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALSTRING,
+                        tag_der, &amp;tag_len);
+         break;
+       case TYPE_BIT_STRING:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_BIT_STRING, tag_der,
+                        &amp;tag_len);
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SEQUENCE_OF:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED,
+                        ASN1_TAG_SEQUENCE, tag_der, &amp;tag_len);
+         break;
+       case TYPE_SET:
+       case TYPE_SET_OF:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED,
+                        ASN1_TAG_SET, tag_der, &amp;tag_len);
+         break;
+       case TYPE_TAG:
+         tag_len = 0;
+         break;
+       case TYPE_CHOICE:
+         tag_len = 0;
+         break;
+       case TYPE_ANY:
+         tag_len = 0;
+         break;
+       default:
+         return ASN1_GENERIC_ERROR;
+       }
+    }
+
+  *max_len -= tag_len;
+  if (*max_len >= 0)
+    memcpy (der + *counter, tag_der, tag_len);
+  *counter += tag_len;
+
+  if (*max_len < 0)
+    return ASN1_MEM_ERROR;
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_find_node_src', 'asn1_find_node_button')"><span id="asn1_find_node_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_find_node
+</td>
+<td class="function_entry_cyclo">
+20
+</td>
+<td class="function_entry_number">
+50
+</td>
+<td class="function_entry_number">
+95
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_find_node_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+ASN1_TYPE
+asn1_find_node (ASN1_TYPE pointer, const char *name)
+{
+  ASN1_TYPE p;
+  char *n_end, n[ASN1_MAX_NAME_SIZE + 1];
+  const char *n_start;
+
+  if (pointer == NULL)
+    return NULL;
+
+  if (name == NULL)
+    return NULL;
+
+  p = pointer;
+  n_start = name;
+
+  if (p->name != NULL)
+    {                          /* has *pointer got a name ? */
+      n_end = strchr (n_start, '.');   /* search the first dot */
+      if (n_end)
+       {
+         memcpy (n, n_start, n_end - n_start);
+         n[n_end - n_start] = 0;
+         n_start = n_end;
+         n_start++;
+       }
+      else
+       {
+         _asn1_str_cpy (n, sizeof (n), n_start);
+         n_start = NULL;
+       }
+
+      while (p)
+       {
+         if ((p->name) &amp;& (!strcmp (p->name, n)))
+           break;
+         else
+           p = p->right;
+       }                       /* while */
+
+      if (p == NULL)
+       return NULL;
+    }
+  else
+    {                          /* *pointer doesn't have a name */
+      if (n_start[0] == 0)
+       return p;
+    }
+
+  while (n_start)
+    {                          /* Has the end of NAME been reached? */
+      n_end = strchr (n_start, '.');   /* search the next dot */
+      if (n_end)
+       {
+         memcpy (n, n_start, n_end - n_start);
+         n[n_end - n_start] = 0;
+         n_start = n_end;
+         n_start++;
+       }
+      else
+       {
+         _asn1_str_cpy (n, sizeof (n), n_start);
+         n_start = NULL;
+       }
+
+      if (p->down == NULL)
+       return NULL;
+
+      p = p->down;
+
+      /* The identifier "?LAST" indicates the last element
+         in the right chain. */
+      if (!strcmp (n, "?LAST"))
+       {
+         if (p == NULL)
+           return NULL;
+         while (p->right)
+           p = p->right;
+       }
+      else
+       {                       /* no "?LAST" */
+         while (p)
+           {
+             if ((p->name) &amp;& (!strcmp (p->name, n)))
+               break;
+             else
+               p = p->right;
+           }
+         if (p == NULL)
+           return NULL;
+       }
+    }                          /* while */
+
+  return p;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_type_choice_config_src', '_asn1_type_choice_config_button')"><span id="_asn1_type_choice_config_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_type_choice_config
+</td>
+<td class="function_entry_cyclo">
+20
+</td>
+<td class="function_entry_number">
+47
+</td>
+<td class="function_entry_number">
+83
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_type_choice_config_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static asn1_retCode
+_asn1_type_choice_config (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2, p3, p4;
+  int move, tlen;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) &amp;& (move == UP)))
+    {
+      if (move != UP)
+       {
+         if ((type_field (p->type) == TYPE_CHOICE) &amp;& (p->type & CONST_TAG))
+           {
+             p2 = p->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) != TYPE_TAG)
+                   {
+                     p2->type |= CONST_TAG;
+                     p3 = _asn1_find_left (p2);
+                     while (p3)
+                       {
+                         if (type_field (p3->type) == TYPE_TAG)
+                           {
+                             p4 = _asn1_add_node_only (p3->type);
+                             tlen = strlen (p3->value);
+                             if (tlen > 0)
+                               _asn1_set_value (p4, p3->value, tlen + 1);
+                             _asn1_set_right (p4, p2->down);
+                             _asn1_set_down (p2, p4);
+                           }
+                         p3 = _asn1_find_left (p3);
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             p->type &amp;= ~(CONST_TAG);
+             p2 = p->down;
+             while (p2)
+               {
+                 p3 = p2->right;
+                 if (type_field (p2->type) == TYPE_TAG)
+                   asn1_delete_structure (&amp;p2);
+                 p2 = p3;
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_get_octet_string_src', '_asn1_get_octet_string_button')"><span id="_asn1_get_octet_string_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_get_octet_string
+</td>
+<td class="function_entry_cyclo">
+17
+</td>
+<td class="function_entry_number">
+47
+</td>
+<td class="function_entry_number">
+82
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_get_octet_string_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static asn1_retCode
+_asn1_get_octet_string (const unsigned char *der, ASN1_TYPE node, int *len)
+{
+  int len2, len3, counter, tot_len, indefinite;
+
+  counter = 0;
+
+  if (*(der - 1) &amp; ASN1_CLASS_STRUCTURED)
+    {
+      tot_len = 0;
+      indefinite = asn1_get_length_der (der, *len, &amp;len3);
+      if (indefinite < -1)
+       return ASN1_DER_ERROR;
+
+      counter += len3;
+      if (indefinite >= 0)
+       indefinite += len3;
+
+      while (1)
+       {
+         if (counter > (*len))
+           return ASN1_DER_ERROR;
+
+         if (indefinite == -1)
+           {
+             if ((der[counter] == 0) &amp;& (der[counter + 1] == 0))
+               {
+                 counter += 2;
+                 break;
+               }
+           }
+         else if (counter >= indefinite)
+           break;
+
+         if (der[counter] != ASN1_TAG_OCTET_STRING)
+           return ASN1_DER_ERROR;
+
+         counter++;
+
+         len2 = asn1_get_length_der (der + counter, *len - counter, &amp;len3);
+         if (len2 <= 0)
+           return ASN1_DER_ERROR;
+
+         counter += len3 + len2;
+         tot_len += len2;
+       }
+
+      /* copy */
+      if (node)
+       {
+         unsigned char temp[DER_LEN];
+         int ret;
+
+         len2 = sizeof (temp);
+
+         asn1_length_der (tot_len, temp, &amp;len2);
+         _asn1_set_value (node, temp, len2);
+
+         tot_len += len2;
+
+         ret = _asn1_extract_der_octet (node, der, *len);
+         if (ret != ASN1_SUCCESS)
+           return ret;
+
+       }
+    }
+  else
+    {                          /* NOT STRUCTURED */
+      len2 = asn1_get_length_der (der, *len, &amp;len3);
+      if (len2 < 0)
+       return ASN1_DER_ERROR;
+      if (len3 + len2 > *len)
+       return ASN1_DER_ERROR;
+      if (node)
+       _asn1_set_value (node, der, len3 + len2);
+      counter = len3 + len2;
+    }
+
+  *len = counter;
+  return ASN1_SUCCESS;
+
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_ordering_set_src', '_asn1_ordering_set_button')"><span id="_asn1_ordering_set_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_ordering_set
+</td>
+<td class="function_entry_cyclo">
+16
+</td>
+<td class="function_entry_number">
+59
+</td>
+<td class="function_entry_number">
+104
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_ordering_set_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static void
+_asn1_ordering_set (unsigned char *der, int der_len, ASN1_TYPE node)
+{
+  struct vet
+  {
+    int end;
+    unsigned long value;
+    struct vet *next, *prev;
+  };
+
+  int counter, len, len2;
+  struct vet *first, *last, *p_vet, *p2_vet;
+  ASN1_TYPE p;
+  unsigned char class, *temp;
+  unsigned long tag;
+
+  counter = 0;
+
+  if (type_field (node->type) != TYPE_SET)
+    return;
+
+  p = node->down;
+  while ((type_field (p->type) == TYPE_TAG)
+        || (type_field (p->type) == TYPE_SIZE))
+    p = p->right;
+
+  if ((p == NULL) || (p->right == NULL))
+    return;
+
+  first = last = NULL;
+  while (p)
+    {
+      p_vet = (struct vet *) _asn1_malloc (sizeof (struct vet));
+      if (p_vet == NULL)
+       return;
+
+      p_vet->next = NULL;
+      p_vet->prev = last;
+      if (first == NULL)
+       first = p_vet;
+      else
+       last->next = p_vet;
+      last = p_vet;
+
+      /* tag value calculation */
+      if (asn1_get_tag_der
+         (der + counter, der_len - counter, &amp;class, &len2,
+          &amp;tag) != ASN1_SUCCESS)
+       return;
+      p_vet->value = (class << 24) | tag;
+      counter += len2;
+
+      /* extraction and length */
+      len2 = asn1_get_length_der (der + counter, der_len - counter, &amp;len);
+      if (len2 < 0)
+       return;
+      counter += len + len2;
+
+      p_vet->end = counter;
+      p = p->right;
+    }
+
+  p_vet = first;
+
+  while (p_vet)
+    {
+      p2_vet = p_vet->next;
+      counter = 0;
+      while (p2_vet)
+       {
+         if (p_vet->value > p2_vet->value)
+           {
+             /* change position */
+             temp = (unsigned char *) _asn1_malloc (p_vet->end - counter);
+             if (temp == NULL)
+               return;
+
+             memcpy (temp, der + counter, p_vet->end - counter);
+             memcpy (der + counter, der + p_vet->end,
+                     p2_vet->end - p_vet->end);
+             memcpy (der + counter + p2_vet->end - p_vet->end, temp,
+                     p_vet->end - counter);
+             _asn1_free (temp);
+
+             tag = p_vet->value;
+             p_vet->value = p2_vet->value;
+             p2_vet->value = tag;
+
+             p_vet->end = counter + (p2_vet->end - p_vet->end);
+           }
+         counter = p_vet->end;
+
+         p2_vet = p2_vet->next;
+         p_vet = p_vet->next;
+       }
+
+      if (p_vet != first)
+       p_vet->prev->next = NULL;
+      else
+       first = NULL;
+      _asn1_free (p_vet);
+      p_vet = first;
+    }
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('yysyntax_error_src', 'yysyntax_error_button')"><span id="yysyntax_error_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+yysyntax_error
+</td>
+<td class="function_entry_cyclo">
+15
+</td>
+<td class="function_entry_number">
+62
+</td>
+<td class="function_entry_number">
+100
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="yysyntax_error_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn &amp;& yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx &amp;& yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' &amp;& yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_convert_integer_src', '_asn1_convert_integer_button')"><span id="_asn1_convert_integer_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_convert_integer
+</td>
+<td class="function_entry_cyclo">
+15
+</td>
+<td class="function_entry_number">
+35
+</td>
+<td class="function_entry_number">
+50
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_convert_integer_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_convert_integer (const char *value, unsigned char *value_out,
+                      int value_out_size, int *len)
+{
+  char negative;
+  unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
+  long valtmp;
+  int k, k2;
+
+  valtmp = strtol (value, NULL, 10);
+
+  for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++)
+    {
+      val[SIZEOF_UNSIGNED_LONG_INT - k - 1] = (valtmp >> (8 * k)) &amp; 0xFF;
+    }
+
+  if (val[0] &amp; 0x80)
+    negative = 1;
+  else
+    negative = 0;
+
+  for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT - 1; k++)
+    {
+      if (negative &amp;& (val[k] != 0xFF))
+       break;
+      else if (!negative &amp;& val[k])
+       break;
+    }
+
+  if ((negative &amp;& !(val[k] & 0x80)) || (!negative && (val[k] & 0x80)))
+    k--;
+
+  *len = SIZEOF_UNSIGNED_LONG_INT - k;
+
+  if (SIZEOF_UNSIGNED_LONG_INT - k > value_out_size)
+    /* VALUE_OUT is too short to contain the value conversion */
+    return ASN1_MEM_ERROR;
+
+  for (k2 = k; k2 < SIZEOF_UNSIGNED_LONG_INT; k2++)
+    value_out[k2 - k] = val[k2];
+
+#if 0
+  printf ("_asn1_convert_integer: valueIn=%s, lenOut=%d", value, *len);
+  for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++)
+    printf (", vOut[%d]=%d", k, value_out[k]);
+  printf ("\n");
+#endif
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_read_tag_src', 'asn1_read_tag_button')"><span id="asn1_read_tag_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_read_tag
+</td>
+<td class="function_entry_cyclo">
+29
+</td>
+<td class="function_entry_number">
+51
+</td>
+<td class="function_entry_number">
+101
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_read_tag_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+asn1_read_tag (ASN1_TYPE root, const char *name, int *tagValue,
+              int *classValue)
+{
+  ASN1_TYPE node, p, pTag;
+
+  node = asn1_find_node (root, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node->down;
+
+  /* pTag will points to the IMPLICIT TAG */
+  pTag = NULL;
+  if (node->type &amp; CONST_TAG)
+    {
+      while (p)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if ((p->type &amp; CONST_IMPLICIT) && (pTag == NULL))
+               pTag = p;
+             else if (p->type &amp; CONST_EXPLICIT)
+               pTag = NULL;
+           }
+         p = p->right;
+       }
+    }
+
+  if (pTag)
+    {
+      *tagValue = strtoul (pTag->value, NULL, 10);
+
+      if (pTag->type &amp; CONST_APPLICATION)
+       *classValue = ASN1_CLASS_APPLICATION;
+      else if (pTag->type &amp; CONST_UNIVERSAL)
+       *classValue = ASN1_CLASS_UNIVERSAL;
+      else if (pTag->type &amp; CONST_PRIVATE)
+       *classValue = ASN1_CLASS_PRIVATE;
+      else
+       *classValue = ASN1_CLASS_CONTEXT_SPECIFIC;
+    }
+  else
+    {
+      *classValue = ASN1_CLASS_UNIVERSAL;
+
+      switch (type_field (node->type))
+       {
+       case TYPE_NULL:
+         *tagValue = ASN1_TAG_NULL;
+         break;
+       case TYPE_BOOLEAN:
+         *tagValue = ASN1_TAG_BOOLEAN;
+         break;
+       case TYPE_INTEGER:
+         *tagValue = ASN1_TAG_INTEGER;
+         break;
+       case TYPE_ENUMERATED:
+         *tagValue = ASN1_TAG_ENUMERATED;
+         break;
+       case TYPE_OBJECT_ID:
+         *tagValue = ASN1_TAG_OBJECT_ID;
+         break;
+       case TYPE_TIME:
+         if (node->type &amp; CONST_UTC)
+           {
+             *tagValue = ASN1_TAG_UTCTime;
+           }
+         else
+           *tagValue = ASN1_TAG_GENERALIZEDTime;
+         break;
+       case TYPE_OCTET_STRING:
+         *tagValue = ASN1_TAG_OCTET_STRING;
+         break;
+       case TYPE_GENERALSTRING:
+         *tagValue = ASN1_TAG_GENERALSTRING;
+         break;
+       case TYPE_BIT_STRING:
+         *tagValue = ASN1_TAG_BIT_STRING;
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SEQUENCE_OF:
+         *tagValue = ASN1_TAG_SEQUENCE;
+         break;
+       case TYPE_SET:
+       case TYPE_SET_OF:
+         *tagValue = ASN1_TAG_SET;
+         break;
+       case TYPE_TAG:
+       case TYPE_CHOICE:
+       case TYPE_ANY:
+         break;
+       default:
+         break;
+       }
+    }
+
+
+  return ASN1_SUCCESS;
+
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_objectid_der_src', '_asn1_objectid_der_button')"><span id="_asn1_objectid_der_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_objectid_der
+</td>
+<td class="function_entry_cyclo">
+14
+</td>
+<td class="function_entry_number">
+44
+</td>
+<td class="function_entry_number">
+69
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_objectid_der_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static asn1_retCode
+_asn1_objectid_der (unsigned char *str, unsigned char *der, int *der_len)
+{
+  int len_len, counter, k, first, max_len;
+  char *temp, *n_end, *n_start;
+  unsigned char bit7;
+  unsigned long val, val1 = 0;
+
+  max_len = *der_len;
+
+  temp = (char *) _asn1_malloc (strlen (str) + 2);
+  if (temp == NULL)
+    return ASN1_MEM_ALLOC_ERROR;
+
+  strcpy (temp, str);
+  strcat (temp, ".");
+
+  counter = 0;
+  n_start = temp;
+  while ((n_end = strchr (n_start, '.')))
+    {
+      *n_end = 0;
+      val = strtoul (n_start, NULL, 10);
+      counter++;
+
+      if (counter == 1)
+       val1 = val;
+      else if (counter == 2)
+       {
+         if (max_len > 0)
+           der[0] = 40 * val1 + val;
+         *der_len = 1;
+       }
+      else
+       {
+         first = 0;
+         for (k = 4; k >= 0; k--)
+           {
+             bit7 = (val >> (k * 7)) &amp; 0x7F;
+             if (bit7 || first || !k)
+               {
+                 if (k)
+                   bit7 |= 0x80;
+                 if (max_len > (*der_len))
+                   der[*der_len] = bit7;
+                 (*der_len)++;
+                 first = 1;
+               }
+           }
+
+       }
+      n_start = n_end + 1;
+    }
+
+  asn1_length_der (*der_len, NULL, &amp;len_len);
+  if (max_len >= (*der_len + len_len))
+    {
+      memmove (der + len_len, der, *der_len);
+      asn1_length_der (*der_len, der, &amp;len_len);
+    }
+  *der_len += len_len;
+
+  _asn1_free (temp);
+
+  if (max_len < (*der_len))
+    return ASN1_MEM_ERROR;
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_type_set_config_src', '_asn1_type_set_config_button')"><span id="_asn1_type_set_config_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_type_set_config
+</td>
+<td class="function_entry_cyclo">
+14
+</td>
+<td class="function_entry_number">
+30
+</td>
+<td class="function_entry_number">
+58
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_type_set_config_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_type_set_config (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+  int move;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) &amp;& (move == UP)))
+    {
+      if (move != UP)
+       {
+         if (type_field (p->type) == TYPE_SET)
+           {
+             p2 = p->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) != TYPE_TAG)
+                   p2->type |= CONST_SET | CONST_NOT_USED;
+                 p2 = p2->right;
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_get_objectid_der_src', '_asn1_get_objectid_der_button')"><span id="_asn1_get_objectid_der_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_get_objectid_der
+</td>
+<td class="function_entry_cyclo">
+13
+</td>
+<td class="function_entry_number">
+39
+</td>
+<td class="function_entry_number">
+60
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_get_objectid_der_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static int
+_asn1_get_objectid_der (const unsigned char *der, int der_len, int *ret_len,
+                       char *str, int str_size)
+{
+  int len_len, len, k;
+  int leading;
+  char temp[20];
+  unsigned long val, val1, prev_val;
+
+  *ret_len = 0;
+  if (str &amp;& str_size > 0)
+    str[0] = 0;                        /* no oid */
+
+  if (str == NULL || der_len <= 0)
+    return ASN1_GENERIC_ERROR;
+  len = asn1_get_length_der (der, der_len, &amp;len_len);
+
+  if (len < 0 || len > der_len || len_len > der_len)
+    return ASN1_DER_ERROR;
+
+  val1 = der[len_len] / 40;
+  val = der[len_len] - val1 * 40;
+
+  _asn1_str_cpy (str, str_size, _asn1_ltostr (val1, temp));
+  _asn1_str_cat (str, str_size, ".");
+  _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp));
+
+  prev_val = 0;
+  val = 0;
+  leading = 1;
+  for (k = 1; k < len; k++)
+    {
+      /* X.690 mandates that the leading byte must never be 0x80
+       */
+      if (leading != 0 &amp;& der[len_len + k] == 0x80)
+       return ASN1_DER_ERROR;
+      leading = 0;
+
+      /* check for wrap around */
+      val = val << 7;
+      val |= der[len_len + k] &amp; 0x7F;
+
+      if (val < prev_val)
+       return ASN1_DER_ERROR;
+
+      prev_val = val;
+
+      if (!(der[len_len + k] &amp; 0x80))
+       {
+         _asn1_str_cat (str, str_size, ".");
+         _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp));
+         val = 0;
+         prev_val = 0;
+         leading = 1;
+       }
+    }
+  *ret_len = len + len_len;
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_delete_not_used_src', '_asn1_delete_not_used_button')"><span id="_asn1_delete_not_used_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_delete_not_used
+</td>
+<td class="function_entry_cyclo">
+13
+</td>
+<td class="function_entry_number">
+30
+</td>
+<td class="function_entry_number">
+58
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_delete_not_used_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+static int
+_asn1_delete_not_used (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if (p->type &amp; CONST_NOT_USED)
+       {
+         p2 = NULL;
+         if (p != node)
+           {
+             p2 = _asn1_find_left (p);
+             if (!p2)
+               p2 = _asn1_find_up (p);
+           }
+         asn1_delete_structure (&amp;p);
+         p = p2;
+       }
+
+      if (!p)
+       break;                  /* reach node */
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else
+       {
+         if (p == node)
+           p = NULL;
+         else if (p->right)
+           p = p->right;
+         else
+           {
+             while (1)
+               {
+                 p = _asn1_find_up (p);
+                 if (p == node)
+                   {
+                     p = NULL;
+                     break;
+                   }
+                 if (p->right)
+                   {
+                     p = p->right;
+                     break;
+                   }
+               }
+           }
+       }
+    }
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_set_default_tag_src', '_asn1_set_default_tag_button')"><span id="_asn1_set_default_tag_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_set_default_tag
+</td>
+<td class="function_entry_cyclo">
+13
+</td>
+<td class="function_entry_number">
+22
+</td>
+<td class="function_entry_number">
+47
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_set_default_tag_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_set_default_tag (ASN1_TYPE node)
+{
+  ASN1_TYPE p;
+
+  if ((node == NULL) || (type_field (node->type) != TYPE_DEFINITIONS))
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if ((type_field (p->type) == TYPE_TAG) &amp;&
+         !(p->type &amp; CONST_EXPLICIT) && !(p->type & CONST_IMPLICIT))
+       {
+         if (node->type &amp; CONST_EXPLICIT)
+           p->type |= CONST_EXPLICIT;
+         else
+           p->type |= CONST_IMPLICIT;
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == node)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_create_static_structure_src', '_asn1_create_static_structure_button')"><span id="_asn1_create_static_structure_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_create_static_structure
+</td>
+<td class="function_entry_cyclo">
+12
+</td>
+<td class="function_entry_number">
+41
+</td>
+<td class="function_entry_number">
+78
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_create_static_structure_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_create_static_structure (ASN1_TYPE pointer, char *output_file_name,
+                              char *vector_name)
+{
+  FILE *file;
+  ASN1_TYPE p;
+  unsigned long t;
+
+  file = fopen (output_file_name, "w");
+
+  if (file == NULL)
+    return ASN1_FILE_NOT_FOUND;
+
+  fprintf (file, "#if HAVE_CONFIG_H\n");
+  fprintf (file, "# include \"config.h\"\n");
+  fprintf (file, "#endif\n\n");
+
+  fprintf (file, "#include <libtasn1.h>\n\n");
+
+  fprintf (file, "const ASN1_ARRAY_TYPE %s[] = {\n", vector_name);
+
+  p = pointer;
+
+  while (p)
+    {
+      fprintf (file, "  { ");
+
+      if (p->name)
+       fprintf (file, "\"%s\", ", p->name);
+      else
+       fprintf (file, "NULL, ");
+
+      t = p->type;
+      if (p->down)
+       t |= CONST_DOWN;
+      if (p->right)
+       t |= CONST_RIGHT;
+
+      fprintf (file, "%lu, ", t);
+
+      if (p->value)
+       fprintf (file, "\"%s\"},\n", p->value);
+      else
+       fprintf (file, "NULL },\n");
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p->right)
+       {
+         p = p->right;
+       }
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == pointer)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  fprintf (file, "  { NULL, 0, NULL }\n};\n");
+
+  fclose (file);
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_copy_structure3_src', '_asn1_copy_structure3_button')"><span id="_asn1_copy_structure3_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_copy_structure3
+</td>
+<td class="function_entry_cyclo">
+12
+</td>
+<td class="function_entry_number">
+37
+</td>
+<td class="function_entry_number">
+67
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_copy_structure3_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+ASN1_TYPE
+_asn1_copy_structure3 (ASN1_TYPE source_node)
+{
+  ASN1_TYPE dest_node, p_s, p_d, p_d_prev;
+  int move;
+
+  if (source_node == NULL)
+    return NULL;
+
+  dest_node = _asn1_add_node_only (source_node->type);
+
+  p_s = source_node;
+  p_d = dest_node;
+
+  move = DOWN;
+
+  do
+    {
+      if (move != UP)
+       {
+         if (p_s->name)
+           _asn1_set_name (p_d, p_s->name);
+         if (p_s->value)
+           _asn1_set_value (p_d, p_s->value, p_s->value_len);
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p_s->down)
+           {
+             p_s = p_s->down;
+             p_d_prev = p_d;
+             p_d = _asn1_add_node_only (p_s->type);
+             _asn1_set_down (p_d_prev, p_d);
+           }
+         else
+           move = RIGHT;
+       }
+
+      if (p_s == source_node)
+       break;
+
+      if (move == RIGHT)
+       {
+         if (p_s->right)
+           {
+             p_s = p_s->right;
+             p_d_prev = p_d;
+             p_d = _asn1_add_node_only (p_s->type);
+             _asn1_set_right (p_d_prev, p_d);
+           }
+         else
+           move = UP;
+       }
+      if (move == UP)
+       {
+         p_s = _asn1_find_up (p_s);
+         p_d = _asn1_find_up (p_d);
+       }
+    }
+  while (p_s != source_node);
+
+  return dest_node;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('_asn1_change_integer_value_src', '_asn1_change_integer_value_button')"><span id="_asn1_change_integer_value_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+_asn1_change_integer_value
+</td>
+<td class="function_entry_cyclo">
+12
+</td>
+<td class="function_entry_number">
+28
+</td>
+<td class="function_entry_number">
+56
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="_asn1_change_integer_value_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+asn1_retCode
+_asn1_change_integer_value (ASN1_TYPE node)
+{
+  ASN1_TYPE p;
+  unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
+  unsigned char val2[SIZEOF_UNSIGNED_LONG_INT + 1];
+  int len;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if ((type_field (p->type) == TYPE_INTEGER) &amp;& (p->type & CONST_ASSIGN))
+       {
+         if (p->value)
+           {
+             _asn1_convert_integer (p->value, val, sizeof (val), &amp;len);
+             asn1_octet_der (val, len, val2, &amp;len);
+             _asn1_set_value (p, val2, len);
+           }
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else
+       {
+         if (p == node)
+           p = NULL;
+         else if (p->right)
+           p = p->right;
+         else
+           {
+             while (1)
+               {
+                 p = _asn1_find_up (p);
+                 if (p == node)
+                   {
+                     p = NULL;
+                     break;
+                   }
+                 if (p->right)
+                   {
+                     p = p->right;
+                     break;
+                   }
+               }
+           }
+       }
+    }
+
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_moderate">
+<td class="function_entry_filename">
+<a href="javascript:void(0);" title="show/hide function source" onClick="javascript:show_hide('asn1_get_tag_der_src', 'asn1_get_tag_der_button')"><span id="asn1_get_tag_der_button">&darr;</span></a>
+</td>
+<td class="function_entry_name">
+asn1_get_tag_der
+</td>
+<td class="function_entry_cyclo">
+11
+</td>
+<td class="function_entry_number">
+24
+</td>
+<td class="function_entry_number">
+44
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr>
+<td colspan="6" height="0">
+<div id="asn1_get_tag_der_src" class="function_src" style="position: relative; display: none;">
+<pre class="function_src">
+int
+asn1_get_tag_der (const unsigned char *der, int der_len,
+                 unsigned char *cls, int *len, unsigned long *tag)
+{
+  int punt, ris;
+
+  if (der == NULL || der_len < 2 || len == NULL)
+    return ASN1_DER_ERROR;
+
+  *cls = der[0] &amp; 0xE0;
+  if ((der[0] &amp; 0x1F) != 0x1F)
+    {
+      /* short form */
+      *len = 1;
+      ris = der[0] &amp; 0x1F;
+    }
+  else
+    {
+      /* Long form */
+      punt = 1;
+      ris = 0;
+      while (punt <= der_len &amp;& der[punt] & 128)
+       {
+         int last = ris;
+         ris = ris * 128 + (der[punt++] &amp; 0x7F);
+         if (ris < last)
+           /* wrapper around, and no bignums... */
+           return ASN1_DER_ERROR;
+       }
+      if (punt >= der_len)
+       return ASN1_DER_ERROR;
+      {
+       int last = ris;
+       ris = ris * 128 + (der[punt++] &amp; 0x7F);
+       if (ris < last)
+         /* wrapper around, and no bignums... */
+         return ASN1_DER_ERROR;
+      }
+      *len = punt;
+    }
+  if (tag)
+    *tag = ris;
+  return ASN1_SUCCESS;
+}
+</pre>
+</div>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_get_indefinite_length_string
+</td>
+<td class="function_entry_cyclo">
+10
+</td>
+<td class="function_entry_number">
+27
+</td>
+<td class="function_entry_number">
+49
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_complete_explicit_tag
+</td>
+<td class="function_entry_cyclo">
+10
+</td>
+<td class="function_entry_number">
+26
+</td>
+<td class="function_entry_number">
+56
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_parser2array
+</td>
+<td class="function_entry_cyclo">
+9
+</td>
+<td class="function_entry_number">
+48
+</td>
+<td class="function_entry_number">
+95
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_find_structure_from_oid
+</td>
+<td class="function_entry_cyclo">
+9
+</td>
+<td class="function_entry_number">
+23
+</td>
+<td class="function_entry_number">
+43
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_delete_structure
+</td>
+<td class="function_entry_cyclo">
+8
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_number">
+50
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yytnamerr
+</td>
+<td class="function_entry_cyclo">
+11
+</td>
+<td class="function_entry_number">
+20
+</td>
+<td class="function_entry_number">
+38
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_append_value
+</td>
+<td class="function_entry_cyclo">
+7
+</td>
+<td class="function_entry_number">
+22
+</td>
+<td class="function_entry_number">
+39
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_extract_der_octet
+</td>
+<td class="function_entry_cyclo">
+7
+</td>
+<td class="function_entry_number">
+20
+</td>
+<td class="function_entry_number">
+44
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_get_length_der
+</td>
+<td class="function_entry_cyclo">
+7
+</td>
+<td class="function_entry_number">
+20
+</td>
+<td class="function_entry_number">
+43
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_append_sequence_set
+</td>
+<td class="function_entry_cyclo">
+7
+</td>
+<td class="function_entry_number">
+20
+</td>
+<td class="function_entry_number">
+33
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_set_value
+</td>
+<td class="function_entry_cyclo">
+7
+</td>
+<td class="function_entry_number">
+17
+</td>
+<td class="function_entry_number">
+31
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_create_errorDescription
+</td>
+<td class="function_entry_cyclo">
+11
+</td>
+<td class="function_entry_number">
+29
+</td>
+<td class="function_entry_number">
+42
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_parser2tree
+</td>
+<td class="function_entry_cyclo">
+6
+</td>
+<td class="function_entry_number">
+26
+</td>
+<td class="function_entry_number">
+58
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_length_der
+</td>
+<td class="function_entry_cyclo">
+6
+</td>
+<td class="function_entry_number">
+15
+</td>
+<td class="function_entry_number">
+31
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_set_name
+</td>
+<td class="function_entry_cyclo">
+6
+</td>
+<td class="function_entry_number">
+13
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_number_of_elements
+</td>
+<td class="function_entry_cyclo">
+6
+</td>
+<td class="function_entry_number">
+13
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_remove_node
+</td>
+<td class="function_entry_cyclo">
+5
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_copy_node
+</td>
+<td class="function_entry_cyclo">
+5
+</td>
+<td class="function_entry_number">
+21
+</td>
+<td class="function_entry_number">
+40
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_delete_element
+</td>
+<td class="function_entry_cyclo">
+5
+</td>
+<td class="function_entry_number">
+14
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_set_value_m
+</td>
+<td class="function_entry_cyclo">
+5
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_number">
+22
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_get_time_der
+</td>
+<td class="function_entry_cyclo">
+5
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_number">
+17
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_find_up
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_number">
+15
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_find_left
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+8
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_ltostr
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+22
+</td>
+<td class="function_entry_number">
+32
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_tag_der
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+14
+</td>
+<td class="function_entry_number">
+29
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_hierarchical_name
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/element.c;hb=HEAD">lib/element.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_get_bit_der
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_get_octet_der
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+11
+</td>
+<td class="function_entry_number">
+26
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_time_der
+</td>
+<td class="function_entry_cyclo">
+4
+</td>
+<td class="function_entry_number">
+11
+</td>
+<td class="function_entry_number">
+19
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yy_symbol_value_print
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+24
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_get_length_ber
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+9
+</td>
+<td class="function_entry_number">
+17
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_strerror
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_number">
+11
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/errors.c;hb=HEAD">lib/errors.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_get_last_right
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_str_cat
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_number">
+19
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/gstr.c;hb=HEAD">lib/gstr.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_str_cpy
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+18
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/gstr.c;hb=HEAD">lib/gstr.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_set_down
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_set_right
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_octet_der
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_check_version
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+8
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/version.c;hb=HEAD">lib/version.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_add_node
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+14
+</td>
+<td class="function_entry_number">
+25
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_bit_der
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+13
+</td>
+<td class="function_entry_number">
+20
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_set_value_octet
+</td>
+<td class="function_entry_cyclo">
+3
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_number">
+17
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yydestruct
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+5
+</td>
+<td class="function_entry_number">
+32
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yy_stack_print
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_number">
+17
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_delete_list_and_nodes
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+13
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_add_node_only
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+13
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yystrlen
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_number">
+24
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yy_symbol_print
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+5
+</td>
+<td class="function_entry_number">
+18
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_delete_list
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+5
+</td>
+<td class="function_entry_number">
+12
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_error_description_value_not_found
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+5
+</td>
+<td class="function_entry_number">
+14
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/coding.c;hb=HEAD">lib/coding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yystpcpy
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+5
+</td>
+<td class="function_entry_number">
+17
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_mod_type
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+4
+</td>
+<td class="function_entry_number">
+8
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_yyerror
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+4
+</td>
+<td class="function_entry_number">
+14
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_perror
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+6
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/errors.c;hb=HEAD">lib/errors.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_get_name
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_get_down
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_get_right
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+7
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/parser_aux.c;hb=HEAD">lib/parser_aux.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+asn1_create_element
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_number">
+21
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+yy_reduce_print
+</td>
+<td class="function_entry_cyclo">
+2
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_number">
+24
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_copy_structure2
+</td>
+<td class="function_entry_cyclo">
+1
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/structure.c;hb=HEAD">lib/structure.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+_asn1_error_description_tag_error
+</td>
+<td class="function_entry_cyclo">
+1
+</td>
+<td class="function_entry_number">
+3
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/decoding.c;hb=HEAD">lib/decoding.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+YYID
+</td>
+<td class="function_entry_cyclo">
+1
+</td>
+<td class="function_entry_number">
+1
+</td>
+<td class="function_entry_number">
+10
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/ASN1.c;hb=HEAD">lib/ASN1.c</a>
+</td>
+</tr>
+<tr class="function_entry_simple">
+<td class="function_entry_filename">
+&nbsp;
+</td>
+<td class="function_entry_name">
+libtasn1_strerror
+</td>
+<td class="function_entry_cyclo">
+1
+</td>
+<td class="function_entry_number">
+1
+</td>
+<td class="function_entry_number">
+5
+</td>
+<td class="function_entry_filename">
+<a href="http://git.savannah.gnu.org/gitweb/?p=libtasn1.git;a=blob;f=lib/errors.c;hb=HEAD">lib/errors.c</a>
+</td>
+</tr>
+</table>
+<hr color="black" size="2"/> Copyright (c) 2007, 2008 Free Software Foundation, Inc.
+</body>
+</html>
diff --git a/doc/fdl-1.3.texi b/doc/fdl-1.3.texi
new file mode 100644 (file)
index 0000000..8805f1a
--- /dev/null
@@ -0,0 +1,506 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{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.
+
+@item
+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
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification.  Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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:
+
+@enumerate A
+@item
+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.
+
+@item
+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.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+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.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+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.
+
+@item
+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.''
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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.
+
+@item
+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
+@uref{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.
+
+@item
+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.
+
+@end enumerate
+
+@page
+@heading 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:
+
+@smallexample
+@group
+  Copyright (C)  @var{year}  @var{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''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+@end group
+@end smallexample
+
+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.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/doc/gdoc b/doc/gdoc
new file mode 100755 (executable)
index 0000000..82d9e0a
--- /dev/null
+++ b/doc/gdoc
@@ -0,0 +1,909 @@
+#!/usr/bin/perl
+
+## Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Simon Josefsson
+##                    added -texinfo, -listfunc, -pkg-name
+##                    man page revamp
+##                    various improvements
+## Copyright (c) 2001, 2002 Nikos Mavrogiannopoulos
+##                    added -tex
+## Copyright (c) 1998 Michael Zucchi
+
+# 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/>.
+
+# This will read a C source code file and scan for embedded comments
+# in the style of gnome comments (+minor extensions - see below).
+
+# usage:
+# gdoc [ -docbook | -html | -text | -man | -tex | -texinfo | -listfunc ]
+#      [ -sourceversion verno ] [ -include file | -includefuncprefix ]
+#      [ -bugsto address ] [ -pkg-name packagename ]
+#      [ -seeinfo infonode ] [ -copyright notice ] [ -verbatimcopying ]
+#      [ -function funcname [ -function funcname ...] ] c file(s)s > outputfile
+#
+#  Set output format using one of -docbook, -html, -text, -man, -tex,
+#  -texinfo, or -listfunc.  Default is man.
+#
+#  -sourceversion
+#       Version number for source code, e.g. '1.0.4'.  Used in 'man' headers.
+#       Defaults to using current date.
+#
+#  -include FILE
+#       For man pages, mention #include <FILE.h> in the synopsis.
+#
+#  -includefuncprefix
+#       For man pages, mention a #include <FILE.h> in the synopsis.
+#       The FILE derived from the function prefix.  For example, a
+#       function gss_init_sec_context will generate an include
+#       statement of #include <gss.h>.
+#
+#  -bugsto address
+#       For man pages, include a section about reporting bugs and mention
+#       the given e-mail address, e.g 'bug-libidn@gnu.org'.
+#
+#  -pkg-name packagename
+#       For man pages when -bugsto is used, also include help URLs to the
+#       the project's home page.  For example, "GNU Libidn".
+#
+#  -seeinfo infonode
+#       For man pages, include a section that point to an info manual
+#       for more information.
+#
+#  -copyright notice
+#       For man pages, include a copyright section with the given
+#       notice after a preamble.  Use, e.g., '2002, 2003 Simon Josefsson'.
+#
+#  -verbatimcopying
+#       For man pages, and when the -copyright parameter is used,
+#       add a licensing statement that say verbatim copying is permitted.
+#
+#  -function funcname
+#      If set, then only generate documentation for the given function(s).  All
+#      other functions are ignored.
+#
+#  c files - list of 'c' files to process
+#
+#  All output goes to stdout, with errors to stderr.
+
+#
+# format of comments.
+# In the following table, (...)? signifies optional structure.
+#                         (...)* signifies 0 or more structure elements
+# /**
+#  * function_name(:)? (- short description)?
+# (* @parameterx: (description of parameter x)?)*
+# (* a blank line)?
+#  * (Description:)? (Description of function)?
+#  * (Section header: (section description)? )*
+#  (*)?*/
+#
+# So .. the trivial example would be:
+#
+# /**
+#  * my_function
+#  **/
+#
+# If the Description: header tag is ommitted, then there must be a blank line
+# after the last parameter specification.
+# e.g.
+# /**
+#  * my_function - does my stuff
+#  * @my_arg: its mine damnit
+#  *
+#  * Does my stuff explained. 
+#  */
+#
+#  or, could also use:
+# /**
+#  * my_function - does my stuff
+#  * @my_arg: its mine damnit
+#  * Description: Does my stuff explained. 
+#  */
+# etc.
+#
+# All descriptions can be multiline, apart from the short function description.
+#
+# All descriptive text is further processed, scanning for the following special
+# patterns, which are highlighted appropriately.
+#
+# 'funcname()' - function
+# '$ENVVAR' - environmental variable OBSOLETE (?)
+# '#struct_name' - name of a structure
+# '@parameter' - name of a parameter
+# '%CONST' - name of a constant.
+
+#
+# Extensions for LaTeX:
+#
+# 1. the symbol '->' will be replaced with a rightarrow
+# 2. x^y with ${x}^{y}$.
+# 3. xxx\: with xxx:
+
+use POSIX qw(strftime);
+
+# match expressions used to find embedded type information
+$type_constant = "\\\%(\\w+)";
+$type_func = "(\\w+\\(\\))";
+$type_param = "\\\@(\\w+)";
+$type_struct = "\\\#(\\w+)";
+$type_env = "(\\\$\\w+)";
+
+
+# Output conversion substitutions.
+#  One for each output format
+
+# these work fairly well
+%highlights_html = ( $type_constant, "<i>\$1</i>",
+                    $type_func, "<b>\$1</b>",
+                    $type_struct, "<i>\$1</i>",
+                    $type_param, "<tt><b>\$1</b></tt>" );
+$blankline_html = "<p>";
+
+%highlights_texinfo = ( $type_constant, "\\\@code{\$1}",
+                       $type_func, "\\\@code{\$1}",
+                       $type_struct, "\\\@code{\$1}",
+                       $type_param, "\\\@code{\$1}" );
+$blankline_texinfo = "";
+
+%highlights_tex = ( $type_constant, "{\\\\it \$1}",
+                    $type_func, "{\\\\bf \$1}",
+                    $type_struct, "{\\\\it \$1}",
+                    $type_param, "{\\\\bf \$1}" );
+$blankline_tex = "\\\\";
+
+# sgml, docbook format
+%highlights_sgml = ( $type_constant, "<replaceable class=\"option\">\$1</replaceable>",
+                    $type_func, "<function>\$1</function>",
+                    $type_struct, "<structname>\$1</structname>",
+                    $type_env, "<envar>\$1</envar>",
+                    $type_param, "<parameter>\$1</parameter>" );
+$blankline_sgml = "</para><para>\n";
+
+# these are pretty rough
+%highlights_man = ( $type_constant, "\\\\fB\$1\\\\fP",
+                   $type_func, "\\\\fB\$1\\\\fP",
+                   $type_struct, "\\\\fB\$1\\\\fP",
+                   $type_param, "\\\\fI\$1\\\\fP" );
+$blankline_man = "";
+
+# text-mode
+%highlights_text = ( $type_constant, "\$1",
+                    $type_func, "\$1",
+                    $type_struct, "\$1",
+                    $type_param, "\$1" );
+$blankline_text = "";
+
+
+sub usage {
+    print "Usage: $0 [ -v ] [ -docbook | -html | -text | -man | -tex | -texinfo  -listfunc ]\n";
+    print "         [ -sourceversion verno ] [ -include file | -includefuncprefix ]\n";
+    print "         [ -bugsto address ] [ -seeinfo infonode ] [ -copyright notice]\n";
+    print "         [ -verbatimcopying ] [ -pkg-name packagename ]\n";
+    print "         [ -function funcname [ -function funcname ...] ]\n";
+    print "         c source file(s) > outputfile\n";
+    exit 1;
+}
+
+# read arguments
+if ($#ARGV==-1) {
+    usage();
+}
+
+$verbose = 0;
+$output_mode = "man";
+%highlights = %highlights_man;
+$blankline = $blankline_man;
+$modulename = "API Documentation";
+$sourceversion = strftime "%Y-%m-%d", localtime;
+$function_only = 0;
+while ($ARGV[0] =~ m/^-(.*)/) {
+    $cmd = shift @ARGV;
+    if ($cmd eq "-html") {
+       $output_mode = "html";
+       %highlights = %highlights_html;
+       $blankline = $blankline_html;
+    } elsif ($cmd eq "-man") {
+       $output_mode = "man";
+       %highlights = %highlights_man;
+       $blankline = $blankline_man;
+    } elsif ($cmd eq "-tex") {
+       $output_mode = "tex";
+       %highlights = %highlights_tex;
+       $blankline = $blankline_tex;
+    } elsif ($cmd eq "-texinfo") {
+       $output_mode = "texinfo";
+       %highlights = %highlights_texinfo;
+       $blankline = $blankline_texinfo;
+    } elsif ($cmd eq "-text") {
+       $output_mode = "text";
+       %highlights = %highlights_text;
+       $blankline = $blankline_text;
+    } elsif ($cmd eq "-docbook") {
+       $output_mode = "sgml";
+       %highlights = %highlights_sgml;
+       $blankline = $blankline_sgml;
+    } elsif ($cmd eq "-listfunc") {
+       $output_mode = "listfunc";
+    } elsif ($cmd eq "-module") { # not needed for sgml, inherits from calling document
+       $modulename = shift @ARGV;
+    } elsif ($cmd eq "-sourceversion") {
+       $sourceversion = shift @ARGV;
+    } elsif ($cmd eq "-include") {
+       $include = shift @ARGV;
+    } elsif ($cmd eq "-includefuncprefix") {
+       $includefuncprefix = 1;
+    } elsif ($cmd eq "-bugsto") {
+       $bugsto = shift @ARGV;
+    } elsif ($cmd eq "-pkg-name") {
+       $pkgname = shift @ARGV;
+    } elsif ($cmd eq "-copyright") {
+       $copyright = shift @ARGV;
+    } elsif ($cmd eq "-verbatimcopying") {
+       $verbatimcopying = 1;
+    } elsif ($cmd eq "-seeinfo") {
+       $seeinfo = shift @ARGV;
+    } elsif ($cmd eq "-function") { # to only output specific functions
+       $function_only = 1;
+       $function = shift @ARGV;
+       $function_table{$function} = 1;
+    } elsif ($cmd eq "-v") {
+       $verbose = 1;
+    } elsif (($cmd eq "-h") || ($cmd eq "--help")) {
+       usage();
+    }
+}
+
+##
+# dumps section contents to arrays/hashes intended for that purpose.
+#
+sub dump_section {
+    my $name = shift @_;
+    my $contents = join "\n", @_;
+
+    if ($name =~ m/$type_constant/) {
+       $name = $1;
+#      print STDERR "constant section '$1' = '$contents'\n";
+       $constants{$name} = $contents;
+    } elsif ($name =~ m/$type_param/) {
+#      print STDERR "parameter def '$1' = '$contents'\n";
+       $name = $1;
+       $parameters{$name} = $contents;
+    } else {
+#      print STDERR "other section '$name' = '$contents'\n";
+       $sections{$name} = $contents;
+       push @sectionlist, $name;
+    }
+}
+
+##
+# output function
+#
+# parameters, a hash.
+#  function => "function name"
+#  parameterlist => @list of parameters
+#  parameters => %parameter descriptions
+#  sectionlist => @list of sections
+#  sections => %descriont descriptions
+#  
+
+sub repstr {
+    $pattern = shift;
+    $repl = shift;
+    $match1 = shift;
+    $match2 = shift;
+    $match3 = shift;
+    $match4 = shift;
+
+    $output = $repl;
+    $output =~ s,\$1,$match1,g;
+    $output =~ s,\$2,$match2,g;
+    $output =~ s,\$3,$match3,g;
+    $output =~ s,\$4,$match4,g;
+
+    eval "\$return = qq/$output/";
+
+#    print "pattern $pattern matched 1=$match1 2=$match2 3=$match3 4=$match4 replace $repl yielded $output interpolated $return\n";
+
+    $return;
+}
+
+sub just_highlight {
+    my $contents = join "\n", @_;
+    my $line;
+    my $ret = "";
+
+    foreach $pattern (keys %highlights) {
+#      print "scanning pattern $pattern ($highlights{$pattern})\n";
+       $contents =~ s:$pattern:repstr($pattern, $highlights{$pattern}, $1, $2, $3, $4):gse;
+    }
+    foreach $line (split "\n", $contents) {
+       if ($line eq ""){
+           $ret = $ret . $lineprefix . $blankline;
+       } else {
+           $ret = $ret . $lineprefix . $line;
+       }
+       $ret = $ret . "\n";
+    }
+
+    return $ret;
+}
+
+sub output_highlight {
+    print (just_highlight (@_));
+}
+
+# output in texinfo
+sub output_texinfo {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    print "\@subheading ".$args{'function'}."\n";
+    print "\@anchor{".$args{'function'}."}\n";
+    print "\@deftypefun {" . $args{'functiontype'} . "} ";
+    print "{".$args{'function'}."} ";
+    print "(";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print $args{'parametertypes'}{$parameter}." \@var{".$parameter."}";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ", ";
+       }
+    }
+    print ")\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       if ($args{'parameters'}{$parameter}) {
+           print "\@var{".$parameter."}: ";
+           output_highlight($args{'parameters'}{$parameter});
+           print "\n";
+       }
+    }
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "\n\@strong{$section:} " if $section ne $section_default;
+       $args{'sections'}{$section} =~ s:([{}]):\@\1:gs;
+       output_highlight($args{'sections'}{$section});
+    }
+    print "\@end deftypefun\n\n";
+}
+
+# output in html
+sub output_html {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    print "\n\n<a name=\"". $args{'function'} . "\">&nbsp</a><h2>Function</h2>\n";
+
+    print "<i>".$args{'functiontype'}."</i>\n";
+    print "<b>".$args{'function'}."</b>\n";
+    print "(";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter."</b>\n";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ", ";
+       }
+    }
+    print ")\n";
+
+    print "<h3>Arguments</h3>\n";
+    print "<dl>\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print "<dt><i>".$args{'parametertypes'}{$parameter}."</i> <b>".$parameter."</b>\n";
+       print "<dd>";
+       output_highlight($args{'parameters'}{$parameter});
+    }
+    print "</dl>\n";
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<h3>$section</h3>\n";
+       print "<ul>\n";
+       output_highlight($args{'sections'}{$section});
+       print "</ul>\n";
+    }
+    print "<hr>\n";
+}
+
+# output in tex
+sub output_tex {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $func = $args{'function'};
+    my $param;
+    my $param2;
+    my $sec;
+    my $check;
+    my $type;
+
+    $func =~ s/_/\\_/g;
+
+    print "\n\n\\subsection{". $func . "}\n\\label{" . $args{'function'} . "}\n";
+
+    $type = $args{'functiontype'};
+    $type =~ s/_/\\_/g;
+
+    print "{\\it ".$type."}\n";
+    print "{\\bf ".$func."}\n";
+    print "(";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+        $param = $args{'parametertypes'}{$parameter};
+        $param2 = $parameter;
+       $param =~ s/_/\\_/g;
+        $param2 =~ s/_/\\_/g;
+
+       print "{\\it ".$param."} {\\bf ".$param2."}";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ", ";
+       }
+    }
+    print ")\n";
+
+    print "\n{\\large{Arguments}}\n";
+
+    print "\\begin{itemize}\n";
+    $check=0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+        $param1 = $args{'parametertypes'}{$parameter};
+        $param1 =~ s/_/\\_/g;
+        $param2 = $parameter;
+       $param2 =~ s/_/\\_/g;
+
+       $check = 1;
+       print "\\item {\\it ".$param1."} {\\bf ".$param2."}: \n";
+#      print "\n";
+
+       $param3 = $args{'parameters'}{$parameter};
+       $param3 =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
+
+       $out = just_highlight($param3);
+       $out =~ s/_/\\_/g;
+       print $out;
+    }
+    if ($check==0) {
+       print "\\item void\n";
+    }
+    print "\\end{itemize}\n";
+
+    foreach $section (@{$args{'sectionlist'}}) {
+       $sec = $section;
+       $sec =~ s/_/\\_/g;
+       $sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
+
+       print "\n{\\large{$sec}}\\\\\n";
+       print "\\begin{rmfamily}\n";
+
+       $sec = $args{'sections'}{$section};
+       $sec =~ s/\\:/:/g;
+       $sec =~ s/#([a-zA-Z\_]+)/{\\it \1}/g;
+       $sec =~ s/->/\$\\rightarrow\$/g;
+       $sec =~ s/([0-9]+)\^([0-9]+)/\$\{\1\}\^\{\2\}\$/g;
+
+       $out = just_highlight($sec);
+       $out =~ s/_/\\_/g;
+
+       print $out;
+       print "\\end{rmfamily}\n";
+    }
+    print "\n";
+}
+
+
+# output in sgml DocBook
+sub output_sgml {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+    my $id;
+
+    $id = $args{'module'}."-".$args{'function'};
+    $id =~ s/[^A-Za-z0-9]/-/g;
+
+    print "<refentry>\n";
+    print "<refmeta>\n";
+    print "<refentrytitle><phrase id=\"$id\">".$args{'function'}."</phrase></refentrytitle>\n";
+    print "</refmeta>\n";
+    print "<refnamediv>\n";
+    print " <refname>".$args{'function'}."</refname>\n";
+    print " <refpurpose>\n";
+    print "  ".$args{'purpose'}."\n";
+    print " </refpurpose>\n";
+    print "</refnamediv>\n";
+
+    print "<refsynopsisdiv>\n";
+    print " <title>Synopsis</title>\n";
+    print "  <funcsynopsis>\n";
+    print "   <funcdef>".$args{'functiontype'}." ";
+    print "<function>".$args{'function'}." ";
+    print "</function></funcdef>\n";
+
+#    print "<refsect1>\n";
+#    print " <title>Synopsis</title>\n";
+#    print "  <funcsynopsis>\n";
+#    print "   <funcdef>".$args{'functiontype'}." ";
+#    print "<function>".$args{'function'}." ";
+#    print "</function></funcdef>\n";
+
+    $count = 0;
+    if ($#{$args{'parameterlist'}} >= 0) {
+       foreach $parameter (@{$args{'parameterlist'}}) {
+           print "   <paramdef>".$args{'parametertypes'}{$parameter};
+           print " <parameter>$parameter</parameter></paramdef>\n";
+       }
+    } else {
+       print "  <void>\n";
+    }
+    print "  </funcsynopsis>\n";
+    print "</refsynopsisdiv>\n";
+#    print "</refsect1>\n";
+
+    # print parameters
+    print "<refsect1>\n <title>Arguments</title>\n";
+#    print "<para>\nArguments\n";
+    if ($#{$args{'parameterlist'}} >= 0) {
+       print " <variablelist>\n";
+       foreach $parameter (@{$args{'parameterlist'}}) {
+           print "  <varlistentry>\n   <term><parameter>$parameter</parameter></term>\n";
+           print "   <listitem>\n    <para>\n";
+           $lineprefix="     ";
+           output_highlight($args{'parameters'}{$parameter});
+           print "    </para>\n   </listitem>\n  </varlistentry>\n";
+       }
+       print " </variablelist>\n";
+    } else {
+       print " <para>\n  None\n </para>\n";
+    }
+    print "</refsect1>\n";
+
+    # print out each section
+    $lineprefix="   ";
+    foreach $section (@{$args{'sectionlist'}}) {
+       print "<refsect1>\n <title>$section</title>\n <para>\n";
+#      print "<para>\n$section\n";
+       if ($section =~ m/EXAMPLE/i) {
+           print "<example><para>\n";
+       }
+       output_highlight($args{'sections'}{$section});
+#      print "</para>";
+       if ($section =~ m/EXAMPLE/i) {
+           print "</para></example>\n";
+       }
+       print " </para>\n</refsect1>\n";
+    }
+
+    print "\n\n";
+}
+
+##
+# output in man
+sub output_man {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+    my $count;
+
+    print ".\\\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.\n";
+    print ".TH \"$args{'function'}\" 3 \"$args{'sourceversion'}\" \"". $args{'module'} . "\" \"". $args{'module'} . "\"\n";
+
+    print ".SH NAME\n";
+
+    print $args{'function'};
+    if ($args{'purpose'}) {
+       print " \\- " . $args{'purpose'} . "\n";
+    } else {
+       print " \\- API function\n";
+    }
+
+    print ".SH SYNOPSIS\n";
+    print ".B #include <". $args{'include'} . ">\n"
+       if $args{'include'};
+    print ".B #include <". lc((split /_/, $args{'function'})[0]) . ".h>\n"
+       if $args{'includefuncprefix'};
+    print ".sp\n";
+    print ".BI \"".$args{'functiontype'}." ".$args{'function'}."(";
+    $count = 0;
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print $args{'parametertypes'}{$parameter}." \" ".$parameter." \"";
+       if ($count != $#{$args{'parameterlist'}}) {
+           $count++;
+           print ", ";
+       }
+    }
+    print ");\"\n";
+
+    print ".SH ARGUMENTS\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print ".IP \"".$args{'parametertypes'}{$parameter}." ".$parameter."\" 12\n";
+       $param = $args{'parameters'}{$parameter};
+       $param =~ s/-/\\-/g;
+       output_highlight($param);
+    }
+    foreach $section (@{$args{'sectionlist'}}) {
+       print ".SH \"" . uc($section) . "\"\n";
+       $sec = $args{'sections'}{$section};
+       $sec =~ s/-/\\-/g;
+       output_highlight($sec);
+    }
+
+    if ($args{'bugsto'}) {
+       print ".SH \"REPORTING BUGS\"\n";
+       print "Report bugs to <". $args{'bugsto'} . ">.\n";
+       if ($args{'pkgname'}) {
+           print $args{'pkgname'} . " home page: " .
+               "http://www.gnu.org/software/" . $args{'module'} . "/\n";
+       }
+       print "General help using GNU software: http://www.gnu.org/gethelp/\n";
+    }
+
+    if ($args{'copyright'}) {
+       print ".SH COPYRIGHT\n";
+       print "Copyright \\(co ". $args{'copyright'} . ".\n";
+       if ($args{'verbatimcopying'}) {
+           print ".br\n";
+           print "Copying and distribution of this file, with or without modification,\n";
+           print "are permitted in any medium without royalty provided the copyright\n";
+           print "notice and this notice are preserved.\n";
+       }
+    }
+
+    if ($args{'seeinfo'}) {
+       print ".SH \"SEE ALSO\"\n";
+       print "The full documentation for\n";
+       print ".B " . $args{'module'} . "\n";
+       print "is maintained as a Texinfo manual.  If the\n";
+       print ".B info\n";
+       print "and\n";
+       print ".B " . $args{'module'} . "\n";
+       print "programs are properly installed at your site, the command\n";
+       print ".IP\n";
+       print ".B info " . $args{'seeinfo'} . "\n";
+       print ".PP\n";
+       print "should give you access to the complete manual.\n";
+    }
+}
+
+sub output_listfunc {
+    my %args = %{$_[0]};
+    print $args{'function'} . "\n";
+}
+
+##
+# output in text
+sub output_text {
+    my %args = %{$_[0]};
+    my ($parameter, $section);
+
+    print "Function = ".$args{'function'}."\n";
+    print "  return type: ".$args{'functiontype'}."\n\n";
+    foreach $parameter (@{$args{'parameterlist'}}) {
+       print " ".$args{'parametertypes'}{$parameter}." ".$parameter."\n";
+       print "    -> ".$args{'parameters'}{$parameter}."\n";
+    }
+    foreach $section (@{$args{'sectionlist'}}) {
+       print " $section:\n";
+       print "    -> ";
+       output_highlight($args{'sections'}{$section});
+    }
+}
+
+##
+# generic output function - calls the right one based
+# on current output mode.
+sub output_function {
+#    output_html(@_);
+    eval "output_".$output_mode."(\@_);";
+}
+
+
+##
+# takes a function prototype and spits out all the details
+# stored in the global arrays/hsahes.
+sub dump_function {
+    my $prototype = shift @_;
+
+    if ($prototype =~ m/^()([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+       $prototype =~ m/^(\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+       $prototype =~ m/^(\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+)\s+([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/ ||
+       $prototype =~ m/^(\w+\s+\w+\s*\*)\s*([a-zA-Z0-9_~:]+)\s*\(([^\)]*)\)/)  {
+       $return_type = $1;
+       $function_name = $2;
+       $args = $3;
+
+#      print STDERR "ARGS = '$args'\n";
+
+       foreach $arg (split ',', $args) {
+           # strip leading/trailing spaces
+           $arg =~ s/^\s*//;
+           $arg =~ s/\s*$//;
+#          print STDERR "SCAN ARG: '$arg'\n";
+           @args = split('\s', $arg);
+
+#          print STDERR " -> @args\n";
+           $param = pop @args;
+#          print STDERR " -> @args\n";
+           if ($param =~ m/^(\*+)(.*)/) {
+               $param = $2;
+               push @args, $1;
+           }
+           if ($param =~ m/^(.*)(\[\])$/) {
+               $param = $1;
+               push @args, $2;
+           }
+#          print STDERR " :> @args\n";
+           $type = join " ", @args;
+
+           if ($parameters{$param} eq "" && $param != "void") {
+               $parameters{$param} = "-- undescribed --";
+               print STDERR "warning: $lineno: Function parameter '$param' not described in '$function_name'\n";
+           }
+
+           push @parameterlist, $param;
+           $parametertypes{$param} = $type;
+
+#          print STDERR "param = '$param', type = '$type'\n";
+       }
+    } else {
+       print STDERR "warning: $lineno: Cannot understand prototype: '$prototype'\n";
+       return;
+    }
+
+    if ($function_only==0 || defined($function_table{$function_name})) {
+       output_function({'function' => $function_name,
+                        'module' => $modulename,
+                        'sourceversion' => $sourceversion,
+                        'include' => $include,
+                        'includefuncprefix' => $includefuncprefix,
+                        'bugsto' => $bugsto,
+                        'pkgname' => $pkgname,
+                        'copyright' => $copyright,
+                        'verbatimcopying' => $verbatimcopying,
+                        'seeinfo' => $seeinfo,
+                        'functiontype' => $return_type,
+                        'parameterlist' => \@parameterlist,
+                        'parameters' => \%parameters,
+                        'parametertypes' => \%parametertypes,
+                        'sectionlist' => \@sectionlist,
+                        'sections' => \%sections,
+                        'purpose' => $function_purpose
+                        });
+    }
+}
+
+######################################################################
+# main
+# states
+# 0 - normal code
+# 1 - looking for function name
+# 2 - scanning field start.
+# 3 - scanning prototype.
+$state = 0;
+$section = "";
+
+$doc_special = "\@\%\$\#";
+
+$doc_start = "^/\\*\\*\$";
+$doc_end = "\\*/";
+$doc_com = "\\s*\\*\\s*";
+$doc_func = $doc_com."(\\w+):?";
+$doc_sect = $doc_com."([".$doc_special."[:upper:]][\\w ]+):\\s*(.*)";
+$doc_content = $doc_com."(.*)";
+
+%constants = ();
+%parameters = ();
+@parameterlist = ();
+%sections = ();
+@sectionlist = ();
+
+$contents = "";
+$section_default = "Description";      # default section
+$section = $section_default;
+
+$lineno = 0;
+foreach $file (@ARGV) {
+    if (!open(IN,"<$file")) {
+       print STDERR "Error: Cannot open file $file\n";
+       next;
+    }
+    while (<IN>) {
+       $lineno++;
+
+       if ($state == 0) {
+           if (/$doc_start/o) {
+               $state = 1;             # next line is always the function name
+           }
+       } elsif ($state == 1) { # this line is the function name (always)
+           if (/$doc_func/o) {
+               $function = $1;
+               $state = 2;
+               if (/-\s*(.*)/) {
+                   $function_purpose = $1;
+               } else {
+                   $function_purpose = "";
+               }
+               if ($verbose) {
+                   print STDERR "Info($lineno): Scanning doc for $function\n";
+               }
+           } else {
+               print STDERR "warning: $lineno: Cannot understand $_ on line $lineno",
+               " - I thought it was a doc line\n";
+               $state = 0;
+           }
+       } elsif ($state == 2) { # look for head: lines, and include content
+           if (/$doc_sect/o) {
+               $newsection = $1;
+               $newcontents = $2;
+
+               if ($contents ne "") {
+                   dump_section($section, $contents);
+                   $section = $section_default;
+               }
+
+               $contents = $newcontents;
+               if ($contents ne "") {
+                   $contents .= "\n";
+               }
+               $section = $newsection;
+           } elsif (/$doc_end/) {
+
+               if ($contents ne "") {
+                   dump_section($section, $contents);
+                   $section = $section_default;
+                   $contents = "";
+               }
+
+#          print STDERR "end of doc comment, looking for prototype\n";
+               $prototype = "";
+               $state = 3;
+           } elsif (/$doc_content/) {
+               # miguel-style comment kludge, look for blank lines after
+               # @parameter line to signify start of description
+               if ($1 eq "" && $section =~ m/^@/) {
+                   dump_section($section, $contents);
+                   $section = $section_default;
+                   $contents = "";
+               } else {
+                   $contents .= $1."\n";
+               }
+           } else {
+               # i dont know - bad line?  ignore.
+               print STDERR "warning: $lineno: Bad line: $_";
+           }
+       } elsif ($state == 3) { # scanning for function { (end of prototype)
+           if (m#\s*/\*\s+MACDOC\s*#io) {
+             # do nothing
+           }
+           elsif (/([^\{]*)/) {
+               $prototype .= $1;
+           }
+           if (/\{/) {
+               $prototype =~ s@/\*.*?\*/@@gos; # strip comments.
+               $prototype =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
+               $prototype =~ s@^ +@@gos; # strip leading spaces
+               dump_function($prototype);
+
+               $function = "";
+               %constants = ();
+               %parameters = ();
+               %parametertypes = ();
+               @parameterlist = ();
+               %sections = ();
+               @sectionlist = ();
+               $prototype = "";
+
+               $state = 0;
+           }
+       }
+    }
+}
diff --git a/doc/libtasn1.html b/doc/libtasn1.html
new file mode 100644 (file)
index 0000000..11be4ba
--- /dev/null
@@ -0,0 +1,1937 @@
+<html lang="en">
+<head>
+<title>GNU Libtasn1 2.7</title>
+<meta http-equiv="Content-Type" content="text/html">
+<meta name="description" content="GNU Libtasn1 2.7">
+<meta name="generator" content="makeinfo 4.13">
+<link title="Top" rel="top" href="#Top">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<!--
+This manual is for GNU Libtasn1
+(version 2.7, 20 April 2010),
+which is a library for Abstract Syntax Notation One (ASN.1) and
+Distinguish Encoding Rules (DER) manipulation.
+
+Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 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".
+   -->
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+  pre.display { font-family:inherit }
+  pre.format  { font-family:inherit }
+  pre.smalldisplay { font-family:inherit; font-size:smaller }
+  pre.smallformat  { font-family:inherit; font-size:smaller }
+  pre.smallexample { font-size:smaller }
+  pre.smalllisp    { font-size:smaller }
+  span.sc    { font-variant:small-caps }
+  span.roman { font-family:serif; font-weight:normal; } 
+  span.sansserif { font-family:sans-serif; font-weight:normal; } 
+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>
+<h1 class="settitle">GNU Libtasn1 2.7</h1>
+<div class="contents">
+<h2>Table of Contents</h2>
+<ul>
+<li><a name="toc_Top" href="#Top">Libtasn1</a>
+<li><a name="toc_Introduction" href="#Introduction">1 Introduction</a>
+<li><a name="toc_ASN_002e1-structure-handling" href="#ASN_002e1-structure-handling">2 ASN.1 structure handling</a>
+<ul>
+<li><a href="#ASN_002e1-syntax">2.1 ASN.1 syntax</a>
+<li><a href="#Naming">2.2 Naming</a>
+<li><a href="#Library-Notes">2.3 Library Notes</a>
+<li><a href="#Future-developments">2.4 Future developments</a>
+</li></ul>
+<li><a name="toc_Utilities" href="#Utilities">3 Utilities</a>
+<ul>
+<li><a href="#Invoking-asn1Parser">3.1 Invoking asn1Parser</a>
+<li><a href="#Invoking-asn1Coding">3.2 Invoking asn1Coding</a>
+<li><a href="#Invoking-asn1Decoding">3.3 Invoking asn1Decoding</a>
+</li></ul>
+<li><a name="toc_Function-reference" href="#Function-reference">4 Function reference</a>
+<ul>
+<li><a href="#ASN_002e1-schema-functions">4.1 ASN.1 schema functions</a>
+<li><a href="#ASN_002e1-field-functions">4.2 ASN.1 field functions</a>
+<li><a href="#DER-functions">4.3 DER functions</a>
+<li><a href="#Error-handling-functions">4.4 Error handling functions</a>
+<li><a href="#Auxilliary-functions">4.5 Auxilliary functions</a>
+</li></ul>
+<li><a name="toc_Copying-Information" href="#Copying-Information">Appendix A Copying Information</a>
+<ul>
+<li><a href="#GNU-Free-Documentation-License">A.1 GNU Free Documentation License</a>
+</li></ul>
+<li><a name="toc_Concept-Index" href="#Concept-Index">Concept Index</a>
+<li><a name="toc_Function-and-Data-Index" href="#Function-and-Data-Index">Function and Data Index</a>
+</li></ul>
+</div>
+
+
+
+<div class="node">
+<a name="Top"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Introduction">Introduction</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
+
+</div>
+
+<h2 class="unnumbered">Libtasn1</h2>
+
+<p>This manual is for GNU Libtasn1
+(version 2.7, 20 April 2010),
+which is a library for Abstract Syntax Notation One (ASN.1) and
+Distinguish Encoding Rules (DER) manipulation.
+
+   <p>Copyright &copy; 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+   <blockquote>
+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 &ldquo;GNU Free
+Documentation License&rdquo;. 
+</blockquote>
+
+<ul class="menu">
+<li><a accesskey="1" href="#Introduction">Introduction</a>
+<li><a accesskey="2" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>
+<li><a accesskey="3" href="#Utilities">Utilities</a>
+<li><a accesskey="4" href="#Function-reference">Function reference</a>
+<li><a accesskey="5" href="#Copying-Information">Copying Information</a>
+
+</li></ul>
+<p>Indices
+
+</p>
+<ul class="menu">
+<li><a accesskey="6" href="#Concept-Index">Concept Index</a>:                Index of concepts and programs. 
+<li><a accesskey="7" href="#Function-and-Data-Index">Function and Data Index</a>:      Index of functions, variables and data types. 
+</ul>
+
+<div class="node">
+<a name="Introduction"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Top">Top</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="chapter">1 Introduction</h2>
+
+<p>This document describes the Libtasn1 library developed for ASN.1
+(Abstract Syntax Notation One) structures management and DER
+(Distinguished Encoding Rules) encoding functions.
+
+   <p>The main features of this library are:
+
+     <ul>
+<li>On line ASN1 structure management that doesn't require any
+C code file generation.
+
+     <li>Off line ASN1 structure management with C code file generation
+containing an array.
+
+     <li>DER (Distinguish Encoding Rules) encoding.
+
+     <li>No limits for INTEGER and ENUMERATED values.
+
+     <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>It's thread-safe. 
+<a name="index-threads-1"></a>No global variables are used and multiple library handles and session
+handles may be used in parallel.
+
+     <li>It's portable. 
+<a name="index-Porting-2"></a>It should work on all Unix like operating systems, including Windows. 
+The library itself should be portable to any C89 system, not even
+POSIX is required. 
+</ul>
+
+<div class="node">
+<a name="ASN.1-structure-handling"></a>
+<a name="ASN_002e1-structure-handling"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Utilities">Utilities</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Introduction">Introduction</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="chapter">2 ASN.1 structure handling</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="#ASN_002e1-syntax">ASN.1 syntax</a>
+<li><a accesskey="2" href="#Naming">Naming</a>
+<li><a accesskey="3" href="#Library-Notes">Library Notes</a>
+<li><a accesskey="4" href="#Future-developments">Future developments</a>
+</ul>
+
+<div class="node">
+<a name="ASN.1-syntax"></a>
+<a name="ASN_002e1-syntax"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Naming">Naming</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>
+
+</div>
+
+<h3 class="section">2.1 ASN.1 syntax</h3>
+
+<p><a name="index-ASN_002e1-schema-3"></a>
+The parser is case sensitive. The comments begin with "&ndash; " and end at
+the end of lines.  An example is in "pkix.asn" file.  ASN.1
+definitions must have this syntax:
+
+<pre class="verbatim">      definitions_name {&lt;object definition>}
+
+      DEFINITIONS &lt;EXPLICIT or IMPLICIT> TAGS ::=
+
+      BEGIN
+
+      &lt;type and constants definitions>
+
+      END
+</pre>
+
+   <p>The token "::=" must be separate from others elements, so this is a
+wrong declaration:
+
+<pre class="example">           ;; INCORRECT
+           Version ::=INTEGER
+</pre>
+   <p>the correct form is:
+
+<pre class="example">        Version ::= INTEGER
+</pre>
+   <p>Here is the list of types that the parser can manage:
+
+   <p><a name="index-Supported-ASN_002e1-types_002c-list-of-4"></a>
+     <ul>
+<li>INTEGER
+<li>ENUMERATED
+<li>BOOLEAN
+<li>OBJECT IDENTIFIER
+<li>NULL
+<li>BIT STRING
+<li>OCTET STRING
+<li>UTCTime
+<li>GeneralizedTime
+<li>GeneralString
+<li>SEQUENCE
+<li>SEQUENCE OF
+<li>SET
+<li>SET OF
+<li>CHOICE
+<li>ANY
+<li>ANY DEFINED BY
+
+   </ul>
+
+   <p>This version doesn't manage REAL type. It doesn't allow the "EXPORT"
+and "IMPORT" sections too.
+
+   <p>The SIZE constraints are allowed, but no check is done on them.
+
+<div class="node">
+<a name="Naming"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Library-Notes">Library Notes</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#ASN_002e1-syntax">ASN.1 syntax</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>
+
+</div>
+
+<h3 class="section">2.2 Naming</h3>
+
+<p>Consider this definition:
+
+<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>To identify the type 'Group' you have to use the null terminated
+string "Example.Group".  These strings are used in functions that are
+described below.
+
+   <p>Others examples:
+
+   <p>Field 'id' in 'Group' type : "Example.Group.id".
+
+   <p>Field 'value1' in field 'value' in type 'Group':
+"Example.Group.value.value1".
+
+   <p>Elements of structured types that don't have a name, receive the name
+"?1","?2", and so on.
+
+   <p>The name "?LAST" indicates the last element of a <code>SET_OF</code> or
+<code>SEQUENCE_OF</code>.
+
+<div class="node">
+<a name="Library-Notes"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Future-developments">Future developments</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Naming">Naming</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>
+
+</div>
+
+<h3 class="section">2.3 Library Notes</h3>
+
+<p><a name="index-Header-file-libtasn1_002eh-5"></a>
+The header file of this library is <samp><span class="file">libtasn1.h</span></samp>.
+
+   <p><a name="index-Main-type-ASN1_005fTYPE-6"></a>
+The main type used in it is <code>ASN1_TYPE</code>, and it's used to store
+the ASN.1 definitions and structures (instances).
+
+   <p>The constant <code>ASN1_TYPE_EMPTY</code> can be used for the variable
+initialization.  For example:
+
+<pre class="example">      ASN1_TYPE definitions=ASN1_TYPE_EMPTY;
+</pre>
+   <p>Some functions require a parameter named errorDescription of char*
+type.  The array must be already allocated and must have at least
+<code>ASN1_MAX_ERROR_DESCRIPTION_SIZE</code> bytes (E.g, as in <code>char
+Description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];</code>).
+
+   <p><code>ASN1_MAX_NAME_SIZE</code> indicates the maximum number of characters of a
+name inside a file with ASN1 definitions.
+
+<div class="node">
+<a name="Future-developments"></a>
+<p><hr>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Library-Notes">Library Notes</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>
+
+</div>
+
+<h3 class="section">2.4 Future developments</h3>
+
+<p><a name="index-Future-developments-7"></a>
+     <ul>
+<li>Add functions for a C code file generation containing equivalent
+data structures (not a single array like now).
+
+     <li>Type REAL.
+
+   </ul>
+
+<div class="node">
+<a name="Utilities"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Function-reference">Function reference</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#ASN_002e1-structure-handling">ASN.1 structure handling</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="chapter">3 Utilities</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="#Invoking-asn1Parser">Invoking asn1Parser</a>
+<li><a accesskey="2" href="#Invoking-asn1Coding">Invoking asn1Coding</a>
+<li><a accesskey="3" href="#Invoking-asn1Decoding">Invoking asn1Decoding</a>
+</ul>
+
+<div class="node">
+<a name="Invoking-asn1Parser"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Invoking-asn1Coding">Invoking asn1Coding</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Utilities">Utilities</a>
+
+</div>
+
+<h3 class="section">3.1 Invoking asn1Parser</h3>
+
+<p><a name="index-asn1Parser-program-8"></a>
+<samp><span class="file">asn1Parser</span></samp> reads one file with ASN1 definitions and generates a
+file with an array to use with libtasn1 functions.
+
+<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>
+
+<div class="node">
+<a name="Invoking-asn1Coding"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Invoking-asn1Decoding">Invoking asn1Decoding</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Invoking-asn1Parser">Invoking asn1Parser</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Utilities">Utilities</a>
+
+</div>
+
+<h3 class="section">3.2 Invoking asn1Coding</h3>
+
+<p><a name="index-asn1Coding-program-9"></a>
+<samp><span class="file">asn1Coding</span></samp> generates a DER encoding from a file with ASN1
+definitions and another one with assignments.
+
+   <p>The file with assignments must have this syntax:
+
+<pre class="verbatim">InstanceName  Asn1Definition
+
+nameString  value
+
+nameString  value
+...
+</pre>
+
+   <p>The output file is a binary file with the DER encoding.
+
+<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>
+
+<div class="node">
+<a name="Invoking-asn1Decoding"></a>
+<p><hr>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Invoking-asn1Coding">Invoking asn1Coding</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Utilities">Utilities</a>
+
+</div>
+
+<h3 class="section">3.3 Invoking asn1Decoding</h3>
+
+<p><a name="index-asn1Decoding-program-10"></a>
+<samp><span class="file">asn1Decoding</span></samp> generates an ASN1 structure from a file with ASN1
+definitions and a binary file with a DER encoding.
+
+<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.
+ -c : checks the syntax only.
+ -o file : output file.
+</pre>
+
+<div class="node">
+<a name="Function-reference"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Copying-Information">Copying Information</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Utilities">Utilities</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="chapter">4 Function reference</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="#ASN_002e1-schema-functions">ASN.1 schema functions</a>
+<li><a accesskey="2" href="#ASN_002e1-field-functions">ASN.1 field functions</a>
+<li><a accesskey="3" href="#DER-functions">DER functions</a>
+<li><a accesskey="4" href="#Error-handling-functions">Error handling functions</a>
+<li><a accesskey="5" href="#Auxilliary-functions">Auxilliary functions</a>
+</ul>
+
+<div class="node">
+<a name="ASN.1-schema-functions"></a>
+<a name="ASN_002e1-schema-functions"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#ASN_002e1-field-functions">ASN.1 field functions</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Function-reference">Function reference</a>
+
+</div>
+
+<h3 class="section">4.1 ASN.1 schema functions</h3>
+
+<h4 class="subheading">asn1_parser2tree</h4>
+
+<p><a name="asn1_005fparser2tree"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_parser2tree</b> (<var>const char * file_name, ASN1_TYPE * definitions, char * errorDescription</var>)<var><a name="index-asn1_005fparser2tree-11"></a></var><br>
+<blockquote><p><var>file_name</var>: specify the path and the name of file that contains
+ASN.1 declarations.
+
+        <p><var>definitions</var>: return the pointer to the structure created from
+"file_name" ASN.1 declarations.
+
+        <p><var>errorDescription</var>: return the error description or an empty
+string if success.
+
+        <p>Function used to start the parse algorithm.  Creates the structures
+needed to manage the definitions included in <code>file_name</code> file.
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_parser2array</h4>
+
+<p><a name="asn1_005fparser2array"></a>
+
+<div class="defun">
+&mdash; Function: int <b>asn1_parser2array</b> (<var>const char * inputFileName, const char * outputFileName, const char * vectorName, char * errorDescription</var>)<var><a name="index-asn1_005fparser2array-12"></a></var><br>
+<blockquote><p><var>inputFileName</var>: specify the path and the name of file that
+contains ASN.1 declarations.
+
+        <p><var>outputFileName</var>: specify the path and the name of file that will
+contain the C vector definition.
+
+        <p><var>vectorName</var>: specify the name of the C vector.
+
+        <p><var>errorDescription</var>: return the error description or an empty
+string if success.
+
+        <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><strong>Returns:</strong> </p></blockquote></div>
+
+<div class="node">
+<a name="ASN.1-field-functions"></a>
+<a name="ASN_002e1-field-functions"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#DER-functions">DER functions</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#ASN_002e1-schema-functions">ASN.1 schema functions</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Function-reference">Function reference</a>
+
+</div>
+
+<h3 class="section">4.2 ASN.1 field functions</h3>
+
+<h4 class="subheading">asn1_array2tree</h4>
+
+<p><a name="asn1_005farray2tree"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_array2tree</b> (<var>const ASN1_ARRAY_TYPE * array, ASN1_TYPE * definitions, char * errorDescription</var>)<var><a name="index-asn1_005farray2tree-13"></a></var><br>
+<blockquote><p><var>array</var>: specify the array that contains ASN.1 declarations
+
+        <p><var>definitions</var>: return the pointer to the structure created by
+*ARRAY ASN.1 declarations
+
+        <p><var>errorDescription</var>: return the error description.
+
+        <p>Creates the structures needed to manage the ASN.1 definitions. 
+<code>array</code> is a vector created by <code>asn1_parser2array()</code>.
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_delete_structure</h4>
+
+<p><a name="asn1_005fdelete_005fstructure"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_delete_structure</b> (<var>ASN1_TYPE * structure</var>)<var><a name="index-asn1_005fdelete_005fstructure-14"></a></var><br>
+<blockquote><p><var>structure</var>: pointer to the structure that you want to delete.
+
+        <p>Deletes the structure *<code>structure</code>.  At the end, *<code>structure</code> is set
+to ASN1_TYPE_EMPTY.
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_delete_element</h4>
+
+<p><a name="asn1_005fdelete_005felement"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_delete_element</b> (<var>ASN1_TYPE structure, const char * element_name</var>)<var><a name="index-asn1_005fdelete_005felement-15"></a></var><br>
+<blockquote><p><var>structure</var>: pointer to the structure that contains the element you
+want to delete.
+
+        <p><var>element_name</var>: element's name you want to delete.
+
+        <p>Deletes the element named *<code>element_name</code> inside *<code>structure</code>.
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_create_element</h4>
+
+<p><a name="asn1_005fcreate_005felement"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_create_element</b> (<var>ASN1_TYPE definitions, const char * source_name, ASN1_TYPE * element</var>)<var><a name="index-asn1_005fcreate_005felement-16"></a></var><br>
+<blockquote><p><var>definitions</var>: pointer to the structure returned by "parser_asn1" function
+
+        <p><var>source_name</var>: the name of the type of the new structure (must be
+inside p_structure).
+
+        <p><var>element</var>: pointer to the structure created.
+
+        <p>Creates a structure of type <code>source_name</code>.  Example using
+"pkix.asn":
+
+        <p>rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr);
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_print_structure</h4>
+
+<p><a name="asn1_005fprint_005fstructure"></a>
+
+<div class="defun">
+&mdash; Function: void <b>asn1_print_structure</b> (<var>FILE * out, ASN1_TYPE structure, const char * name, int mode</var>)<var><a name="index-asn1_005fprint_005fstructure-17"></a></var><br>
+<blockquote><p><var>out</var>: pointer to the output file (e.g. stdout).
+
+        <p><var>structure</var>: pointer to the structure that you want to visit.
+
+        <p><var>name</var>: an element of the structure
+
+        <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>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></blockquote></div>
+
+<h4 class="subheading">asn1_number_of_elements</h4>
+
+<p><a name="asn1_005fnumber_005fof_005felements"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_number_of_elements</b> (<var>ASN1_TYPE element, const char * name, int * num</var>)<var><a name="index-asn1_005fnumber_005fof_005felements-18"></a></var><br>
+<blockquote><p><var>element</var>: pointer to the root of an ASN1 structure.
+
+        <p><var>name</var>: the name of a sub-structure of ROOT.
+
+        <p><var>num</var>: pointer to an integer where the result will be stored
+
+        <p>Counts the number of elements of a sub-structure called NAME with
+names equal to "?1","?2", ...
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_find_structure_from_oid</h4>
+
+<p><a name="asn1_005ffind_005fstructure_005ffrom_005foid"></a>
+
+<div class="defun">
+&mdash; Function: const char * <b>asn1_find_structure_from_oid</b> (<var>ASN1_TYPE definitions, const char * oidValue</var>)<var><a name="index-asn1_005ffind_005fstructure_005ffrom_005foid-19"></a></var><br>
+<blockquote><p><var>definitions</var>: ASN1 definitions
+
+        <p><var>oidValue</var>: value of the OID to search (e.g. "1.2.3.4").
+
+        <p>Search the structure that is defined just after an OID definition.
+
+        <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></blockquote></div>
+
+<h4 class="subheading">asn1_copy_node</h4>
+
+<p><a name="asn1_005fcopy_005fnode"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_copy_node</b> (<var>ASN1_TYPE dst, const char * dst_name, ASN1_TYPE src, const char * src_name</var>)<var><a name="index-asn1_005fcopy_005fnode-20"></a></var><br>
+<blockquote><p><var>dst</var>: Destination ASN1_TYPE node.
+
+        <p><var>dst_name</var>: Field name in destination node.
+
+        <p><var>src</var>: Source ASN1_TYPE node.
+
+        <p><var>src_name</var>: Field name in source node.
+
+        <p>Create a deep copy of a ASN1_TYPE variable.
+
+        <p><strong>Return value:</strong> Return <code>ASN1_SUCCESS</code> on success. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_write_value</h4>
+
+<p><a name="asn1_005fwrite_005fvalue"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_write_value</b> (<var>ASN1_TYPE node_root, const char * name, const void * ivalue, int len</var>)<var><a name="index-asn1_005fwrite_005fvalue-21"></a></var><br>
+<blockquote><p><var>node_root</var>: pointer to a structure
+
+        <p><var>name</var>: the name of the element inside the structure that you want to set.
+
+        <p><var>ivalue</var>: vector used to specify the value to set. If len is &gt;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><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>Set the value of one element inside a structure.
+
+        <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>result=asn1_write_value(cert, "tbsCertificate.issuerUniqueID",
+NULL, 0);
+
+        <p><strong>Description for each type:</strong>
+<strong>INTEGER:</strong> VALUE must contain a two's complement form integer.
+
+        <p>value[0]=0xFF ,               len=1 -&gt; integer=-1. 
+value[0]=0xFF value[1]=0xFF , len=2 -&gt; integer=-1. 
+value[0]=0x01 ,               len=1 -&gt; integer= 1. 
+value[0]=0x00 value[1]=0x01 , len=2 -&gt; integer= 1. 
+value="123"                 , len=0 -&gt; integer= 123.
+
+        <p><strong>ENUMERATED:</strong> As INTEGER (but only with not negative numbers).
+
+        <p><strong>BOOLEAN:</strong> VALUE must be the null terminated string "TRUE" or
+"FALSE" and LEN != 0.
+
+        <p>value="TRUE" , len=1 -&gt; boolean=TRUE. 
+value="FALSE" , len=1 -&gt; boolean=FALSE.
+
+        <p><strong>OBJECT IDENTIFIER:</strong> VALUE must be a null terminated string with
+each number separated by a dot (e.g. "1.2.3.543.1").  LEN != 0.
+
+        <p>value="1 2 840 10040 4 3" , len=1 -&gt; OID=dsa-with-sha.
+
+        <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>value="9801011200Z" , len=1 -&gt; time=Jannuary 1st, 1998
+at 12h 00m Greenwich Mean Time
+
+        <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>value="2001010112001.12-0700" , len=1 -&gt; time=Jannuary
+1st, 2001 at 12h 00m 01.12s Pacific Daylight Time
+
+        <p><strong>OCTET STRING:</strong> VALUE contains the octet string and LEN is the
+number of octets.
+
+        <p>value="$\backslash$x01$\backslash$x02$\backslash$x03" ,
+len=3 -&gt; three bytes octet string
+
+        <p><strong>GeneralString:</strong> VALUE contains the generalstring and LEN is the
+number of octets.
+
+        <p>value="$\backslash$x01$\backslash$x02$\backslash$x03" ,
+len=3 -&gt; three bytes generalstring
+
+        <p><strong>BIT STRING:</strong> VALUE contains the bit string organized by bytes and
+LEN is the number of bits.
+
+        <p>value="$\backslash$xCF" , len=6 -&gt; bit string="110011" (six
+bits)
+
+        <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>result=asn1_write_value(cert,
+"certificate1.tbsCertificate.subject", "rdnSequence",
+1);
+
+        <p><strong>ANY:</strong> VALUE indicates the der encoding of a structure.  LEN != 0.
+
+        <p><strong>SEQUENCE OF:</strong> 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>Using "pkix.asn"\:
+
+        <p>result=asn1_write_value(cert,
+"certificate1.tbsCertificate.subject.rdnSequence", "NEW", 1);
+
+        <p><strong>SET OF:</strong> the same as SEQUENCE OF.  Using "pkix.asn":
+
+        <p>result=asn1_write_value(cert,
+"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1);
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_read_value</h4>
+
+<p><a name="asn1_005fread_005fvalue"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_read_value</b> (<var>ASN1_TYPE root, const char * name, void * ivalue, int * len</var>)<var><a name="index-asn1_005fread_005fvalue-22"></a></var><br>
+<blockquote><p><var>root</var>: pointer to a structure.
+
+        <p><var>name</var>: the name of the element inside a structure that you want to read.
+
+        <p><var>ivalue</var>: vector that will contain the element's content, must be a
+pointer to memory cells already allocated.
+
+        <p><var>len</var>: number of bytes of *value: value[0]..value[len-1]. Initialy
+holds the sizeof value.
+
+        <p>Returns the value of one element inside a structure.
+
+        <p>If an element is OPTIONAL and the function "read_value" 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.
+
+        <p><strong>INTEGER:</strong> VALUE will contain a two's complement form integer.
+
+        <p>integer=-1  -&gt; value[0]=0xFF , len=1. 
+integer=1   -&gt; value[0]=0x01 , len=1.
+
+        <p><strong>ENUMERATED:</strong> As INTEGER (but only with not negative numbers).
+
+        <p><strong>BOOLEAN:</strong> VALUE will be the null terminated string "TRUE" or
+"FALSE" and LEN=5 or LEN=6.
+
+        <p><strong>OBJECT IDENTIFIER:</strong> VALUE will be a null terminated string with
+each number separated by a dot (i.e. "1.2.3.543.1").
+
+        <p>LEN = strlen(VALUE)+1
+
+        <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><strong>GeneralizedTime:</strong> VALUE will be a null terminated string in the
+same format used to set the value.
+
+        <p><strong>OCTET STRING:</strong> VALUE will contain the octet string and LEN will be
+the number of octets.
+
+        <p><strong>GeneralString:</strong> VALUE will contain the generalstring and LEN will
+be the number of octets.
+
+        <p><strong>BIT STRING:</strong> VALUE will contain the bit string organized by bytes
+and LEN will be the number of bits.
+
+        <p><strong>CHOICE:</strong> If NAME indicates a choice type, VALUE will specify the
+alternative selected.
+
+        <p><strong>ANY:</strong> If NAME indicates an any type, VALUE will indicate the DER
+encoding of the structure actually used.
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_read_tag</h4>
+
+<p><a name="asn1_005fread_005ftag"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_read_tag</b> (<var>ASN1_TYPE root, const char * name, int * tagValue, int * classValue</var>)<var><a name="index-asn1_005fread_005ftag-23"></a></var><br>
+<blockquote><p><var>root</var>: pointer to a structure
+
+        <p><var>name</var>: the name of the element inside a structure.
+
+        <p><var>tagValue</var>: variable that will contain the TAG value.
+
+        <p><var>classValue</var>: variable that will specify the TAG type.
+
+        <p>Returns the TAG and the CLASS of one element inside a structure.
+
+        <p><strong>CLASS can have one of these constants:</strong> <code>ASN1_CLASS_APPLICATION</code>,
+<code>ASN1_CLASS_UNIVERSAL</code>, <code>ASN1_CLASS_PRIVATE</code> or
+<code>ASN1_CLASS_CONTEXT_SPECIFIC</code>.
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<div class="node">
+<a name="DER-functions"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Error-handling-functions">Error handling functions</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#ASN_002e1-field-functions">ASN.1 field functions</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Function-reference">Function reference</a>
+
+</div>
+
+<h3 class="section">4.3 DER functions</h3>
+
+<h4 class="subheading">asn1_length_der</h4>
+
+<p><a name="asn1_005flength_005fder"></a>
+
+<div class="defun">
+&mdash; Function: void <b>asn1_length_der</b> (<var>unsigned long int len, unsigned char * ans, int * ans_len</var>)<var><a name="index-asn1_005flength_005fder-24"></a></var><br>
+<blockquote><p><var>len</var>: value to convert.
+
+        <p><var>ans</var>: string returned.
+
+        <p><var>ans_len</var>: number of meaningful bytes of ANS (ans[0]..ans[ans_len-1]).
+
+        <p>Creates the DER coding for the LEN parameter (only the length). 
+The <code>ans</code> buffer is pre-allocated and must have room for the output. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_octet_der</h4>
+
+<p><a name="asn1_005foctet_005fder"></a>
+
+<div class="defun">
+&mdash; Function: void <b>asn1_octet_der</b> (<var>const unsigned char * str, int str_len, unsigned char * der, int * der_len</var>)<var><a name="index-asn1_005foctet_005fder-25"></a></var><br>
+<blockquote><p><var>str</var>: OCTET string.
+
+        <p><var>str_len</var>: STR length (str[0]..str[str_len-1]).
+
+        <p><var>der</var>: string returned.
+
+        <p><var>der_len</var>: number of meaningful bytes of DER (der[0]..der[ans_len-1]).
+
+        <p>Creates the DER coding for an OCTET type (length included). 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_bit_der</h4>
+
+<p><a name="asn1_005fbit_005fder"></a>
+
+<div class="defun">
+&mdash; Function: void <b>asn1_bit_der</b> (<var>const unsigned char * str, int bit_len, unsigned char * der, int * der_len</var>)<var><a name="index-asn1_005fbit_005fder-26"></a></var><br>
+<blockquote><p><var>str</var>: BIT string.
+
+        <p><var>bit_len</var>: number of meaningful bits in STR.
+
+        <p><var>der</var>: string returned.
+
+        <p><var>der_len</var>: number of meaningful bytes of DER
+(der[0]..der[ans_len-1]).
+
+        <p>Creates the DER coding for a BIT STRING type (length and pad
+included). 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_der_coding</h4>
+
+<p><a name="asn1_005fder_005fcoding"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_der_coding</b> (<var>ASN1_TYPE element, const char * name, void * ider, int * len, char * ErrorDescription</var>)<var><a name="index-asn1_005fder_005fcoding-27"></a></var><br>
+<blockquote><p><var>element</var>: pointer to an ASN1 element
+
+        <p><var>name</var>: the name of the structure you want to encode (it must be
+inside *POINTER).
+
+        <p><var>ider</var>: vector that will contain the DER encoding. DER must be a
+pointer to memory cells already allocated.
+
+        <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>Creates the DER encoding for the NAME structure (inside *POINTER
+structure).
+
+        <p><strong>Returns:</strong> </p></blockquote></div>
+
+<h4 class="subheading">asn1_get_length_der</h4>
+
+<p><a name="asn1_005fget_005flength_005fder"></a>
+
+<div class="defun">
+&mdash; Function: signed long <b>asn1_get_length_der</b> (<var>const unsigned char * der, int der_len, int * len</var>)<var><a name="index-asn1_005fget_005flength_005fder-28"></a></var><br>
+<blockquote><p><var>der</var>: DER data to decode.
+
+        <p><var>der_len</var>: Length of DER data to decode.
+
+        <p><var>len</var>: Output variable containing the length of the DER length field.
+
+        <p>Extract a length field from DER data.
+
+        <p><strong>Returns:</strong> Return the decoded length value, or -1 on indefinite
+length, or -2 when the value was too big. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_get_tag_der</h4>
+
+<p><a name="asn1_005fget_005ftag_005fder"></a>
+
+<div class="defun">
+&mdash; Function: int <b>asn1_get_tag_der</b> (<var>const unsigned char * der, int der_len, unsigned char * cls, int * len, unsigned long * tag</var>)<var><a name="index-asn1_005fget_005ftag_005fder-29"></a></var><br>
+<blockquote><p><var>der</var>: DER data to decode.
+
+        <p><var>der_len</var>: Length of DER data to decode.
+
+        <p><var>cls</var>: Output variable containing decoded class.
+
+        <p><var>len</var>: Output variable containing the length of the DER TAG data.
+
+        <p><var>tag</var>: Output variable containing the decoded tag.
+
+        <p>Decode the class and TAG from DER code.
+
+        <p><strong>Returns:</strong> Returns <code>ASN1_SUCCESS</code> on success, or an error. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_get_length_ber</h4>
+
+<p><a name="asn1_005fget_005flength_005fber"></a>
+
+<div class="defun">
+&mdash; Function: signed long <b>asn1_get_length_ber</b> (<var>const unsigned char * ber, int ber_len, int * len</var>)<var><a name="index-asn1_005fget_005flength_005fber-30"></a></var><br>
+<blockquote><p><var>ber</var>: BER data to decode.
+
+        <p><var>ber_len</var>: Length of BER data to decode.
+
+        <p><var>len</var>: Output variable containing the length of the BER length field.
+
+        <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><strong>Returns:</strong> Return the decoded length value, or negative value when
+the value was too big.
+
+        <p><strong>Since:</strong> 2.0
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_get_octet_der</h4>
+
+<p><a name="asn1_005fget_005foctet_005fder"></a>
+
+<div class="defun">
+&mdash; Function: int <b>asn1_get_octet_der</b> (<var>const unsigned char * der, int der_len, int * ret_len, unsigned char * str, int str_size, int * str_len</var>)<var><a name="index-asn1_005fget_005foctet_005fder-31"></a></var><br>
+<blockquote><p><var>der</var>: DER data to decode containing the OCTET SEQUENCE.
+
+        <p><var>der_len</var>: Length of DER data to decode.
+
+        <p><var>ret_len</var>: Output variable containing the length of the DER data.
+
+        <p><var>str</var>: Pre-allocated output buffer to put decoded OCTET SEQUENCE in.
+
+        <p><var>str_size</var>: Length of pre-allocated output buffer.
+
+        <p><var>str_len</var>: Output variable containing the length of the OCTET SEQUENCE.
+
+        <p>Extract an OCTET SEQUENCE from DER data.
+
+        <p><strong>Returns:</strong> Returns <code>ASN1_SUCCESS</code> on success, or an error. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_get_bit_der</h4>
+
+<p><a name="asn1_005fget_005fbit_005fder"></a>
+
+<div class="defun">
+&mdash; Function: int <b>asn1_get_bit_der</b> (<var>const unsigned char * der, int der_len, int * ret_len, unsigned char * str, int str_size, int * bit_len</var>)<var><a name="index-asn1_005fget_005fbit_005fder-32"></a></var><br>
+<blockquote><p><var>der</var>: DER data to decode containing the BIT SEQUENCE.
+
+        <p><var>der_len</var>: Length of DER data to decode.
+
+        <p><var>ret_len</var>: Output variable containing the length of the DER data.
+
+        <p><var>str</var>: Pre-allocated output buffer to put decoded BIT SEQUENCE in.
+
+        <p><var>str_size</var>: Length of pre-allocated output buffer.
+
+        <p><var>bit_len</var>: Output variable containing the size of the BIT SEQUENCE.
+
+        <p>Extract a BIT SEQUENCE from DER data.
+
+        <p><strong>Returns:</strong> Return <code>ASN1_SUCCESS</code> on success, or an error. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_der_decoding</h4>
+
+<p><a name="asn1_005fder_005fdecoding"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_der_decoding</b> (<var>ASN1_TYPE * element, const void * ider, int len, char * errorDescription</var>)<var><a name="index-asn1_005fder_005fdecoding-33"></a></var><br>
+<blockquote><p><var>element</var>: pointer to an ASN1 structure.
+
+        <p><var>ider</var>: vector that contains the DER encoding.
+
+        <p><var>len</var>: number of bytes of *<code>ider</code>: <code>ider</code>[0]..<code>ider</code>[len-1].
+
+        <p><var>errorDescription</var>: null-terminated string contains details when an
+error occurred.
+
+        <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>.  If an error occurs during the decoding
+procedure, the *<code>ELEMENT</code> is deleted and set equal to
+<code>ASN1_TYPE_EMPTY</code>.
+
+        <p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code>
+if <code>ELEMENT</code> is <code>ASN1_TYPE_EMPTY</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></blockquote></div>
+
+<h4 class="subheading">asn1_der_decoding_element</h4>
+
+<p><a name="asn1_005fder_005fdecoding_005felement"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_der_decoding_element</b> (<var>ASN1_TYPE * structure, const char * elementName, const void * ider, int len, char * errorDescription</var>)<var><a name="index-asn1_005fder_005fdecoding_005felement-34"></a></var><br>
+<blockquote><p><var>structure</var>: pointer to an ASN1 structure
+
+        <p><var>elementName</var>: name of the element to fill
+
+        <p><var>ider</var>: vector that contains the DER encoding of the whole structure.
+
+        <p><var>len</var>: number of bytes of *der: der[0]..der[len-1]
+
+        <p><var>errorDescription</var>: null-terminated string contains details when an
+error occurred.
+
+        <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>ASN1_TYPE_EMPTY</code>.
+
+        <p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code>
+if ELEMENT is <code>ASN1_TYPE_EMPTY</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></blockquote></div>
+
+<h4 class="subheading">asn1_der_decoding_startEnd</h4>
+
+<p><a name="asn1_005fder_005fdecoding_005fstartEnd"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_der_decoding_startEnd</b> (<var>ASN1_TYPE element, const void * ider, int len, const char * name_element, int * start, int * end</var>)<var><a name="index-asn1_005fder_005fdecoding_005fstartEnd-35"></a></var><br>
+<blockquote><p><var>element</var>: pointer to an ASN1 element
+
+        <p><var>ider</var>: vector that contains the DER encoding.
+
+        <p><var>len</var>: number of bytes of *<code>ider</code>: <code>ider</code>[0]..<code>ider</code>[len-1]
+
+        <p><var>name_element</var>: an element of NAME structure.
+
+        <p><var>start</var>: the position of the first byte of NAME_ELEMENT decoding
+(<code>ider</code>[*start])
+
+        <p><var>end</var>: the position of the last byte of NAME_ELEMENT decoding
+(<code>ider</code>[*end])
+
+        <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>One example is the sequence "tbsCertificate" inside an X509
+certificate.
+
+        <p><strong>Returns:</strong> <code>ASN1_SUCCESS</code> if DER encoding OK, <code>ASN1_ELEMENT_NOT_FOUND</code>
+if ELEMENT is <code>ASN1_TYPE</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></blockquote></div>
+
+<h4 class="subheading">asn1_expand_any_defined_by</h4>
+
+<p><a name="asn1_005fexpand_005fany_005fdefined_005fby"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_expand_any_defined_by</b> (<var>ASN1_TYPE definitions, ASN1_TYPE * element</var>)<var><a name="index-asn1_005fexpand_005fany_005fdefined_005fby-36"></a></var><br>
+<blockquote><p><var>definitions</var>: ASN1 definitions
+
+        <p><var>element</var>: pointer to an ASN1 structure
+
+        <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><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 -&gt; TYPE association, or other error codes
+depending on DER decoding. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_expand_octet_string</h4>
+
+<p><a name="asn1_005fexpand_005foctet_005fstring"></a>
+
+<div class="defun">
+&mdash; Function: asn1_retCode <b>asn1_expand_octet_string</b> (<var>ASN1_TYPE definitions, ASN1_TYPE * element, const char * octetName, const char * objectName</var>)<var><a name="index-asn1_005fexpand_005foctet_005fstring-37"></a></var><br>
+<blockquote><p><var>definitions</var>: ASN1 definitions
+
+        <p><var>element</var>: pointer to an ASN1 structure
+
+        <p><var>octetName</var>: name of the OCTECT STRING field to expand.
+
+        <p><var>objectName</var>: name of the OBJECT IDENTIFIER field to use to define
+the type for expansion.
+
+        <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><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></blockquote></div>
+
+<div class="node">
+<a name="Error-handling-functions"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Auxilliary-functions">Auxilliary functions</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#DER-functions">DER functions</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Function-reference">Function reference</a>
+
+</div>
+
+<h3 class="section">4.4 Error handling functions</h3>
+
+<h4 class="subheading">asn1_perror</h4>
+
+<p><a name="asn1_005fperror"></a>
+
+<div class="defun">
+&mdash; Function: void <b>asn1_perror</b> (<var>asn1_retCode error</var>)<var><a name="index-asn1_005fperror-38"></a></var><br>
+<blockquote><p><var>error</var>: is an error returned by a libtasn1 function.
+
+        <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>This function replaces <code>libtasn1_perror()</code> in older libtasn1.
+
+        <p><strong>Since:</strong> 1.6
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_strerror</h4>
+
+<p><a name="asn1_005fstrerror"></a>
+
+<div class="defun">
+&mdash; Function: const char * <b>asn1_strerror</b> (<var>asn1_retCode error</var>)<var><a name="index-asn1_005fstrerror-39"></a></var><br>
+<blockquote><p><var>error</var>: is an error returned by a libtasn1 function.
+
+        <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>This function replaces <code>libtasn1_strerror()</code> in older libtasn1.
+
+        <p><strong>Returns:</strong> Pointer to static zero-terminated string describing error
+code.
+
+        <p><strong>Since:</strong> 1.6
+</p></blockquote></div>
+
+<h4 class="subheading">libtasn1_perror</h4>
+
+<p><a name="libtasn1_005fperror"></a>
+
+<div class="defun">
+&mdash; Function: void <b>libtasn1_perror</b> (<var>asn1_retCode error</var>)<var><a name="index-libtasn1_005fperror-40"></a></var><br>
+<blockquote><p><var>error</var>: is an error returned by a libtasn1 function.
+
+        <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><strong>Deprecated:</strong> Use <code>asn1_perror()</code> instead. 
+</p></blockquote></div>
+
+<h4 class="subheading">libtasn1_strerror</h4>
+
+<p><a name="libtasn1_005fstrerror"></a>
+
+<div class="defun">
+&mdash; Function: const char * <b>libtasn1_strerror</b> (<var>asn1_retCode error</var>)<var><a name="index-libtasn1_005fstrerror-41"></a></var><br>
+<blockquote><p><var>error</var>: is an error returned by a libtasn1 function.
+
+        <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><strong>Returns:</strong> Pointer to static zero-terminated string describing error
+code.
+
+        <p><strong>Deprecated:</strong> Use <code>asn1_strerror()</code> instead. 
+</p></blockquote></div>
+
+<div class="node">
+<a name="Auxilliary-functions"></a>
+<p><hr>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Error-handling-functions">Error handling functions</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Function-reference">Function reference</a>
+
+</div>
+
+<h3 class="section">4.5 Auxilliary functions</h3>
+
+<h4 class="subheading">asn1_find_node</h4>
+
+<p><a name="asn1_005ffind_005fnode"></a>
+
+<div class="defun">
+&mdash; Function: ASN1_TYPE <b>asn1_find_node</b> (<var>ASN1_TYPE pointer, const char * name</var>)<var><a name="index-asn1_005ffind_005fnode-42"></a></var><br>
+<blockquote><p><var>pointer</var>: NODE_ASN element pointer.
+
+        <p><var>name</var>: null terminated string with the element's name to find.
+
+        <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><strong>Returns:</strong> the search result, or <code>NULL</code> if not found. 
+</p></blockquote></div>
+
+<h4 class="subheading">asn1_check_version</h4>
+
+<p><a name="asn1_005fcheck_005fversion"></a>
+
+<div class="defun">
+&mdash; Function: const char * <b>asn1_check_version</b> (<var>const char * req_version</var>)<var><a name="index-asn1_005fcheck_005fversion-43"></a></var><br>
+<blockquote><p><var>req_version</var>: Required version number, or <code>NULL</code>.
+
+        <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>See <code>ASN1_VERSION</code> for a suitable <code>req_version</code> string.
+
+        <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></blockquote></div>
+
+<div class="node">
+<a name="Copying-Information"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Concept-Index">Concept Index</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Function-reference">Function reference</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="appendix">Appendix A Copying Information</h2>
+
+<ul class="menu">
+<li><a accesskey="1" href="#GNU-Free-Documentation-License">GNU Free Documentation License</a>:    License for copying this manual. 
+</ul>
+
+<div class="node">
+<a name="GNU-Free-Documentation-License"></a>
+<p><hr>
+Up:&nbsp;<a rel="up" accesskey="u" href="#Copying-Information">Copying Information</a>
+
+</div>
+
+<h3 class="appendixsec">A.1 GNU Free Documentation License</h3>
+
+<p><a name="index-FDL_002c-GNU-Free-Documentation-License-44"></a>
+
+<!-- The GNU Free Documentation License. -->
+<div align="center">Version 1.3, 3 November 2008</div>
+
+<!-- This file is intended to be included within another document, -->
+<!-- hence no sectioning command or @node. -->
+<pre class="display">     Copyright &copy; 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>
+     <ol type=1 start=0>
+<li>PREAMBLE
+
+     <p>The purpose of this License is to make a manual, textbook, or other
+functional and useful document <dfn>free</dfn> 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>This License is a kind of &ldquo;copyleft&rdquo;, 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>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.
+
+     <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 &ldquo;Document&rdquo;, below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as &ldquo;you&rdquo;.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+     <p>A &ldquo;Modified Version&rdquo; 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>A &ldquo;Secondary Section&rdquo; 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>The &ldquo;Invariant Sections&rdquo; 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>The &ldquo;Cover Texts&rdquo; 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>A &ldquo;Transparent&rdquo; 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 &ldquo;Transparent&rdquo; is called &ldquo;Opaque&rdquo;.
+
+     <p>Examples of suitable formats for Transparent copies include plain
+<span class="sc">ascii</span> without markup, Texinfo input format, LaTeX input
+format, <acronym>SGML</acronym> or <acronym>XML</acronym> using a publicly available
+<acronym>DTD</acronym>, and standard-conforming simple <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> designed for human modification.  Examples
+of transparent image formats include <acronym>PNG</acronym>, <acronym>XCF</acronym> and
+<acronym>JPG</acronym>.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, <acronym>SGML</acronym> or
+<acronym>XML</acronym> for which the <acronym>DTD</acronym> and/or processing tools are
+not generally available, and the machine-generated <acronym>HTML</acronym>,
+PostScript or <acronym>PDF</acronym> produced by some word processors for
+output purposes only.
+
+     <p>The &ldquo;Title Page&rdquo; 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, &ldquo;Title Page&rdquo; means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+     <p>The &ldquo;publisher&rdquo; means any person or entity that distributes copies
+of the Document to the public.
+
+     <p>A section &ldquo;Entitled XYZ&rdquo; 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 &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, &ldquo;Endorsements&rdquo;, or &ldquo;History&rdquo;.)  To &ldquo;Preserve the Title&rdquo;
+of such a section when you modify the Document means that it remains a
+section &ldquo;Entitled XYZ&rdquo; according to this definition.
+
+     <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.
+
+     <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>You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+     <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>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>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>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.
+
+     <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:
+
+          <ol type=A start=1>
+<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>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>State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+          <li>Preserve all the copyright notices of the Document.
+
+          <li>Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+          <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>Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+          <li>Include an unaltered copy of this License.
+
+          <li>Preserve the section Entitled &ldquo;History&rdquo;, 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 &ldquo;History&rdquo; 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>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 &ldquo;History&rdquo; 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>For any section Entitled &ldquo;Acknowledgements&rdquo; or &ldquo;Dedications&rdquo;, 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>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>Delete any section Entitled &ldquo;Endorsements&rdquo;.  Such a section
+may not be included in the Modified Version.
+
+          <li>Do not retitle any existing section to be Entitled &ldquo;Endorsements&rdquo; or
+to conflict in title with any Invariant Section.
+
+          <li>Preserve any Warranty Disclaimers.
+          </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>You may add a section Entitled &ldquo;Endorsements&rdquo;, provided it contains
+nothing but endorsements of your Modified Version by various
+parties&mdash;for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+     <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>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.
+
+     <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>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>In the combination, you must combine any sections Entitled &ldquo;History&rdquo;
+in the various original documents, forming one section Entitled
+&ldquo;History&rdquo;; likewise combine any sections Entitled &ldquo;Acknowledgements&rdquo;,
+and any sections Entitled &ldquo;Dedications&rdquo;.  You must delete all
+sections Entitled &ldquo;Endorsements.&rdquo;
+
+     <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>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.
+
+     <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 &ldquo;aggregate&rdquo; 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>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.
+
+     <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>If a section in the Document is Entitled &ldquo;Acknowledgements&rdquo;,
+&ldquo;Dedications&rdquo;, or &ldquo;History&rdquo;, the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+     <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>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>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>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.
+
+     <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>Each version of the License is given a distinguishing version number. 
+If the Document specifies that a particular numbered version of this
+License &ldquo;or any later version&rdquo; 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.
+
+     <li>RELICENSING
+
+     <p>&ldquo;Massive Multiauthor Collaboration Site&rdquo; (or &ldquo;MMC Site&rdquo;) 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
+&ldquo;Massive Multiauthor Collaboration&rdquo; (or &ldquo;MMC&rdquo;) contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+     <p>&ldquo;CC-BY-SA&rdquo; 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>&ldquo;Incorporate&rdquo; means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+     <p>An MMC is &ldquo;eligible for relicensing&rdquo; 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>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.
+
+        </ol>
+
+<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:
+
+<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>
+   <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the &ldquo;with<small class="dots">...</small>Texts.&rdquo; line with this:
+
+<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>
+   <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>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.
+
+<!-- Local Variables: -->
+<!-- ispell-local-pdict: "ispell-dict" -->
+<!-- End: -->
+<div class="node">
+<a name="Concept-Index"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Function-and-Data-Index">Function and Data Index</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Copying-Information">Copying Information</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="unnumbered">Concept Index</h2>
+
+<ul class="index-cp" compact>
+<li><a href="#index-ASN_002e1-schema-3">ASN.1 schema</a>: <a href="#ASN_002e1-syntax">ASN.1 syntax</a></li>
+<li><a href="#index-asn1Coding-program-9">asn1Coding program</a>: <a href="#Invoking-asn1Coding">Invoking asn1Coding</a></li>
+<li><a href="#index-asn1Decoding-program-10">asn1Decoding program</a>: <a href="#Invoking-asn1Decoding">Invoking asn1Decoding</a></li>
+<li><a href="#index-asn1Parser-program-8">asn1Parser program</a>: <a href="#Invoking-asn1Parser">Invoking asn1Parser</a></li>
+<li><a href="#index-FDL_002c-GNU-Free-Documentation-License-44">FDL, GNU Free Documentation License</a>: <a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a></li>
+<li><a href="#index-Future-developments-7">Future developments</a>: <a href="#Future-developments">Future developments</a></li>
+<li><a href="#index-Header-file-libtasn1_002eh-5">Header file libtasn1.h</a>: <a href="#Library-Notes">Library Notes</a></li>
+<li><a href="#index-Main-type-ASN1_005fTYPE-6">Main type ASN1_TYPE</a>: <a href="#Library-Notes">Library Notes</a></li>
+<li><a href="#index-Porting-2">Porting</a>: <a href="#Introduction">Introduction</a></li>
+<li><a href="#index-Supported-ASN_002e1-types_002c-list-of-4">Supported ASN.1 types, list of</a>: <a href="#ASN_002e1-syntax">ASN.1 syntax</a></li>
+<li><a href="#index-threads-1">threads</a>: <a href="#Introduction">Introduction</a></li>
+   </ul><div class="node">
+<a name="Function-and-Data-Index"></a>
+<p><hr>
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Concept-Index">Concept Index</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
+
+</div>
+
+<h2 class="unnumbered">Function and Data Index</h2>
+
+
+
+<ul class="index-fn" compact>
+<li><a href="#index-asn1_005farray2tree-13"><code>asn1_array2tree</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fbit_005fder-26"><code>asn1_bit_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fcheck_005fversion-43"><code>asn1_check_version</code></a>: <a href="#Auxilliary-functions">Auxilliary functions</a></li>
+<li><a href="#index-asn1_005fcopy_005fnode-20"><code>asn1_copy_node</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fcreate_005felement-16"><code>asn1_create_element</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fdelete_005felement-15"><code>asn1_delete_element</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fdelete_005fstructure-14"><code>asn1_delete_structure</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fder_005fcoding-27"><code>asn1_der_coding</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fder_005fdecoding-33"><code>asn1_der_decoding</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fder_005fdecoding_005felement-34"><code>asn1_der_decoding_element</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fder_005fdecoding_005fstartEnd-35"><code>asn1_der_decoding_startEnd</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fexpand_005fany_005fdefined_005fby-36"><code>asn1_expand_any_defined_by</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fexpand_005foctet_005fstring-37"><code>asn1_expand_octet_string</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005ffind_005fnode-42"><code>asn1_find_node</code></a>: <a href="#Auxilliary-functions">Auxilliary functions</a></li>
+<li><a href="#index-asn1_005ffind_005fstructure_005ffrom_005foid-19"><code>asn1_find_structure_from_oid</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fget_005fbit_005fder-32"><code>asn1_get_bit_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fget_005flength_005fber-30"><code>asn1_get_length_ber</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fget_005flength_005fder-28"><code>asn1_get_length_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fget_005foctet_005fder-31"><code>asn1_get_octet_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fget_005ftag_005fder-29"><code>asn1_get_tag_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005flength_005fder-24"><code>asn1_length_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fnumber_005fof_005felements-18"><code>asn1_number_of_elements</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005foctet_005fder-25"><code>asn1_octet_der</code></a>: <a href="#DER-functions">DER functions</a></li>
+<li><a href="#index-asn1_005fparser2array-12"><code>asn1_parser2array</code></a>: <a href="#ASN_002e1-schema-functions">ASN.1 schema functions</a></li>
+<li><a href="#index-asn1_005fparser2tree-11"><code>asn1_parser2tree</code></a>: <a href="#ASN_002e1-schema-functions">ASN.1 schema functions</a></li>
+<li><a href="#index-asn1_005fperror-38"><code>asn1_perror</code></a>: <a href="#Error-handling-functions">Error handling functions</a></li>
+<li><a href="#index-asn1_005fprint_005fstructure-17"><code>asn1_print_structure</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fread_005ftag-23"><code>asn1_read_tag</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fread_005fvalue-22"><code>asn1_read_value</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-asn1_005fstrerror-39"><code>asn1_strerror</code></a>: <a href="#Error-handling-functions">Error handling functions</a></li>
+<li><a href="#index-asn1_005fwrite_005fvalue-21"><code>asn1_write_value</code></a>: <a href="#ASN_002e1-field-functions">ASN.1 field functions</a></li>
+<li><a href="#index-libtasn1_005fperror-40"><code>libtasn1_perror</code></a>: <a href="#Error-handling-functions">Error handling functions</a></li>
+<li><a href="#index-libtasn1_005fstrerror-41"><code>libtasn1_strerror</code></a>: <a href="#Error-handling-functions">Error handling functions</a></li>
+   </ul></body></html>
+
diff --git a/doc/libtasn1.info b/doc/libtasn1.info
new file mode 100644 (file)
index 0000000..81f049e
--- /dev/null
@@ -0,0 +1,1777 @@
+This is libtasn1.info, produced by makeinfo version 4.13 from
+libtasn1.texi.
+
+This manual is for GNU Libtasn1 (version 2.7, 20 April 2010), which is
+a library for Abstract Syntax Notation One (ASN.1) and Distinguish
+Encoding Rules (DER) manipulation.
+
+   Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010
+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
+
+\1f
+File: libtasn1.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+Libtasn1
+********
+
+This manual is for GNU Libtasn1 (version 2.7, 20 April 2010), which is
+a library for Abstract Syntax Notation One (ASN.1) and Distinguish
+Encoding Rules (DER) manipulation.
+
+   Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010
+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.
+
+\1f
+File: libtasn1.info,  Node: Introduction,  Next: ASN.1 structure handling,  Prev: Top,  Up: Top
+
+1 Introduction
+**************
+
+This document describes the Libtasn1 library developed for ASN.1
+(Abstract Syntax Notation One) structures management and DER
+(Distinguished Encoding Rules) encoding functions.
+
+   The main features of this library are:
+
+   * On line ASN1 structure management that doesn't require any C code
+     file generation.
+
+   * Off line ASN1 structure management with C code file generation
+     containing an array.
+
+   * DER (Distinguish Encoding Rules) encoding.
+
+   * 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.
+
+   * It's thread-safe.  No global variables are used and multiple
+     library handles and session handles may be used in parallel.
+
+   * It's portable.  It should work on all Unix like operating systems,
+     including Windows.  The library itself should be portable to any
+     C89 system, not even POSIX is required.
+
+\1f
+File: libtasn1.info,  Node: ASN.1 structure handling,  Next: Utilities,  Prev: Introduction,  Up: Top
+
+2 ASN.1 structure handling
+**************************
+
+* Menu:
+
+* ASN.1 syntax::
+* Naming::
+* Library Notes::
+* Future developments::
+
+\1f
+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 at
+the end of lines.  An example is in "pkix.asn" file.  ASN.1 definitions
+must have this syntax:
+
+      definitions_name {<object definition>}
+
+      DEFINITIONS <EXPLICIT or IMPLICIT> TAGS ::=
+
+      BEGIN
+
+      <type and constants definitions>
+
+      END
+
+   The token "::=" must be separate from others elements, so this is a
+wrong declaration:
+
+           ;; 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
+
+   * SEQUENCE
+
+   * SEQUENCE OF
+
+   * SET
+
+   * SET OF
+
+   * CHOICE
+
+   * ANY
+
+   * ANY DEFINED BY
+
+
+   This version doesn't manage REAL type. It doesn't allow the "EXPORT"
+and "IMPORT" sections too.
+
+   The SIZE constraints are allowed, but no check is done on them.
+
+\1f
+File: libtasn1.info,  Node: Naming,  Next: Library Notes,  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
+
+   To identify the type 'Group' you have to use the null terminated
+string "Example.Group".  These strings are used in functions that are
+described below.
+
+   Others examples:
+
+   Field 'id' in 'Group' type : "Example.Group.id".
+
+   Field 'value1' in field 'value' in type 'Group':
+"Example.Group.value.value1".
+
+   Elements of structured types that don't have a name, receive the name
+"?1","?2", and so on.
+
+   The name "?LAST" indicates the last element of a `SET_OF' or
+`SEQUENCE_OF'.
+
+\1f
+File: libtasn1.info,  Node: Library Notes,  Next: Future developments,  Prev: Naming,  Up: ASN.1 structure handling
+
+2.3 Library Notes
+=================
+
+The header file of this library is `libtasn1.h'.
+
+   The main type used in it is `ASN1_TYPE', and it's used to store the
+ASN.1 definitions and structures (instances).
+
+   The constant `ASN1_TYPE_EMPTY' can be used for the variable
+initialization.  For example:
+
+      ASN1_TYPE definitions=ASN1_TYPE_EMPTY;
+
+   Some functions require a parameter named errorDescription of char*
+type.  The array must be already allocated and must have at least
+`ASN1_MAX_ERROR_DESCRIPTION_SIZE' bytes (E.g, as in `char
+Description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];').
+
+   `ASN1_MAX_NAME_SIZE' indicates the maximum number of characters of a
+name inside a file with ASN1 definitions.
+
+\1f
+File: libtasn1.info,  Node: Future developments,  Prev: Library Notes,  Up: ASN.1 structure handling
+
+2.4 Future developments
+=======================
+
+   * Add functions for a C code file generation containing equivalent
+     data structures (not a single array like now).
+
+   * Type REAL.
+
+
+\1f
+File: libtasn1.info,  Node: Utilities,  Next: Function reference,  Prev: ASN.1 structure handling,  Up: Top
+
+3 Utilities
+***********
+
+* Menu:
+
+* Invoking asn1Parser::
+* Invoking asn1Coding::
+* Invoking asn1Decoding::
+
+\1f
+File: libtasn1.info,  Node: Invoking asn1Parser,  Next: Invoking asn1Coding,  Up: Utilities
+
+3.1 Invoking asn1Parser
+=======================
+
+`asn1Parser' reads one file with ASN1 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.
+
+\1f
+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 ASN1 definitions
+and another one with assignments.
+
+   The file with assignments must have this syntax:
+
+InstanceName  Asn1Definition
+
+nameString  value
+
+nameString  value
+...
+
+   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.
+
+\1f
+File: libtasn1.info,  Node: Invoking asn1Decoding,  Prev: Invoking asn1Coding,  Up: Utilities
+
+3.3 Invoking asn1Decoding
+=========================
+
+`asn1Decoding' generates an ASN1 structure from a file with ASN1
+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.
+ -c : checks the syntax only.
+ -o file : output file.
+
+\1f
+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::
+
+\1f
+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: asn1_retCode asn1_parser2tree (const char * FILE_NAME,
+          ASN1_TYPE * DEFINITIONS, char * ERRORDESCRIPTION)
+     FILE_NAME: specify the path and the name of file that contains
+     ASN.1 declarations.
+
+     DEFINITIONS: return the pointer to the structure created from
+     "file_name" ASN.1 declarations.
+
+     ERRORDESCRIPTION: 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_name' file.
+
+     *Returns:*
+
+asn1_parser2array
+-----------------
+
+ -- Function: int asn1_parser2array (const char * INPUTFILENAME, const
+          char * OUTPUTFILENAME, const char * VECTORNAME, char *
+          ERRORDESCRIPTION)
+     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.
+
+     ERRORDESCRIPTION: 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:*
+
+\1f
+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: asn1_retCode asn1_array2tree (const ASN1_ARRAY_TYPE *
+          ARRAY, ASN1_TYPE * 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_delete_structure
+---------------------
+
+ -- Function: asn1_retCode asn1_delete_structure (ASN1_TYPE * STRUCTURE)
+     STRUCTURE: pointer to the structure that you want to delete.
+
+     Deletes the structure *`structure'.  At the end, *`structure' is
+     set to ASN1_TYPE_EMPTY.
+
+     *Returns:*
+
+asn1_delete_element
+-------------------
+
+ -- Function: asn1_retCode asn1_delete_element (ASN1_TYPE 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_create_element
+-------------------
+
+ -- Function: asn1_retCode asn1_create_element (ASN1_TYPE DEFINITIONS,
+          const char * SOURCE_NAME, ASN1_TYPE * 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_print_structure
+--------------------
+
+ -- Function: void asn1_print_structure (FILE * OUT, ASN1_TYPE
+          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: asn1_retCode asn1_number_of_elements (ASN1_TYPE 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_find_structure_from_oid
+----------------------------
+
+ -- Function: const char * asn1_find_structure_from_oid (ASN1_TYPE
+          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: asn1_retCode asn1_copy_node (ASN1_TYPE DST, const char *
+          DST_NAME, ASN1_TYPE SRC, const char * SRC_NAME)
+     DST: Destination ASN1_TYPE node.
+
+     DST_NAME: Field name in destination node.
+
+     SRC: Source ASN1_TYPE node.
+
+     SRC_NAME: Field name in source node.
+
+     Create a deep copy of a ASN1_TYPE variable.
+
+     *Return value:* Return `ASN1_SUCCESS' on success.
+
+asn1_write_value
+----------------
+
+ -- Function: asn1_retCode asn1_write_value (ASN1_TYPE 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_read_value
+---------------
+
+ -- Function: asn1_retCode asn1_read_value (ASN1_TYPE 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.
+
+     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 the function "read_value" 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.
+
+     *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_read_tag
+-------------
+
+ -- Function: asn1_retCode asn1_read_tag (ASN1_TYPE 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:*
+
+\1f
+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 * ANS, int * ANS_LEN)
+     LEN: value to convert.
+
+     ANS: string returned.
+
+     ANS_LEN: number of meaningful bytes of ANS
+     (ans[0]..ans[ans_len-1]).
+
+     Creates the DER coding for the LEN parameter (only the length).
+     The `ans' buffer is pre-allocated and must have room for the
+     output.
+
+asn1_octet_der
+--------------
+
+ -- Function: void asn1_octet_der (const unsigned char * STR, int
+          STR_LEN, unsigned char * DER, int * DER_LEN)
+     STR: OCTET string.
+
+     STR_LEN: STR length (str[0]..str[str_len-1]).
+
+     DER: string returned.
+
+     DER_LEN: number of meaningful bytes of DER
+     (der[0]..der[ans_len-1]).
+
+     Creates the DER coding for an OCTET type (length included).
+
+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 the DER coding for a BIT STRING type (length and pad
+     included).
+
+asn1_der_coding
+---------------
+
+ -- Function: asn1_retCode asn1_der_coding (ASN1_TYPE 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.
+
+     Creates the DER encoding for the NAME structure (inside *POINTER
+     structure).
+
+     *Returns:*
+
+asn1_get_length_der
+-------------------
+
+ -- Function: signed 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.
+
+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: signed 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_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:* Return `ASN1_SUCCESS' on success, or an error.
+
+asn1_der_decoding
+-----------------
+
+ -- Function: asn1_retCode asn1_der_decoding (ASN1_TYPE * ELEMENT,
+          const void * IDER, int LEN, char * ERRORDESCRIPTION)
+     ELEMENT: pointer to an ASN1 structure.
+
+     IDER: vector that contains the DER encoding.
+
+     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()'.  If an error occurs during the decoding
+     procedure, the *`ELEMENT' is deleted and set equal to
+     `ASN1_TYPE_EMPTY'.
+
+     *Returns:* `ASN1_SUCCESS' if DER encoding OK,
+     `ASN1_ELEMENT_NOT_FOUND' if `ELEMENT' is `ASN1_TYPE_EMPTY', 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: asn1_retCode asn1_der_decoding_element (ASN1_TYPE *
+          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
+     `ASN1_TYPE_EMPTY'.
+
+     *Returns:* `ASN1_SUCCESS' if DER encoding OK,
+     `ASN1_ELEMENT_NOT_FOUND' if ELEMENT is `ASN1_TYPE_EMPTY' 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: asn1_retCode asn1_der_decoding_startEnd (ASN1_TYPE
+          ELEMENT, const void * IDER, int LEN, const char *
+          NAME_ELEMENT, int * START, int * END)
+     ELEMENT: pointer to an ASN1 element
+
+     IDER: vector that contains the DER encoding.
+
+     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.
+
+     *Returns:* `ASN1_SUCCESS' if DER encoding OK,
+     `ASN1_ELEMENT_NOT_FOUND' if ELEMENT is `ASN1_TYPE' 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: asn1_retCode asn1_expand_any_defined_by (ASN1_TYPE
+          DEFINITIONS, ASN1_TYPE * 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: asn1_retCode asn1_expand_octet_string (ASN1_TYPE
+          DEFINITIONS, ASN1_TYPE * 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.
+
+\1f
+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 (asn1_retCode 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.
+
+     This function replaces `libtasn1_perror()' in older libtasn1.
+
+     *Since:* 1.6
+
+asn1_strerror
+-------------
+
+ -- Function: const char * asn1_strerror (asn1_retCode 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.
+
+     This function replaces `libtasn1_strerror()' in older libtasn1.
+
+     *Returns:* Pointer to static zero-terminated string describing
+     error code.
+
+     *Since:* 1.6
+
+libtasn1_perror
+---------------
+
+ -- Function: void libtasn1_perror (asn1_retCode 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.
+
+     *Deprecated:* Use `asn1_perror()' instead.
+
+libtasn1_strerror
+-----------------
+
+ -- Function: const char * libtasn1_strerror (asn1_retCode 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.
+
+     *Deprecated:* Use `asn1_strerror()' instead.
+
+\1f
+File: libtasn1.info,  Node: Auxilliary functions,  Prev: Error handling functions,  Up: Function reference
+
+4.5 Auxilliary functions
+========================
+
+asn1_find_node
+--------------
+
+ -- Function: ASN1_TYPE asn1_find_node (ASN1_TYPE 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.
+
+\1f
+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.
+
+\1f
+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.
+
+\1f
+File: libtasn1.info,  Node: Concept Index,  Next: Function and Data Index,  Prev: Copying Information,  Up: Top
+
+Concept Index
+*************
+
+\0\b[index\0\b]
+* 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_TYPE:                   Library Notes.        (line  8)
+* Porting:                               Introduction.         (line 31)
+* Supported ASN.1 types, list of:        ASN.1 syntax.         (line 32)
+* threads:                               Introduction.         (line 28)
+
+\1f
+File: libtasn1.info,  Node: Function and Data Index,  Prev: Concept Index,  Up: Top
+
+Function and Data Index
+***********************
+
+\0\b[index\0\b]
+* Menu:
+
+* asn1_array2tree:                       ASN.1 field functions.
+                                                              (line  11)
+* asn1_bit_der:                          DER functions.       (line  43)
+* asn1_check_version:                    Auxilliary functions.
+                                                              (line  27)
+* asn1_copy_node:                        ASN.1 field functions.
+                                                              (line 122)
+* asn1_create_element:                   ASN.1 field functions.
+                                                              (line  53)
+* asn1_delete_element:                   ASN.1 field functions.
+                                                              (line  39)
+* asn1_delete_structure:                 ASN.1 field functions.
+                                                              (line  27)
+* asn1_der_coding:                       DER functions.       (line  60)
+* asn1_der_decoding:                     DER functions.       (line 181)
+* asn1_der_decoding_element:             DER functions.       (line 207)
+* asn1_der_decoding_startEnd:            DER functions.       (line 237)
+* asn1_expand_any_defined_by:            DER functions.       (line 271)
+* asn1_expand_octet_string:              DER functions.       (line 292)
+* asn1_find_node:                        Auxilliary functions.
+                                                              (line  11)
+* asn1_find_structure_from_oid:          ASN.1 field functions.
+                                                              (line 107)
+* asn1_get_bit_der:                      DER functions.       (line 160)
+* asn1_get_length_ber:                   DER functions.       (line 116)
+* asn1_get_length_der:                   DER functions.       (line  81)
+* asn1_get_octet_der:                    DER functions.       (line 137)
+* asn1_get_tag_der:                      DER functions.       (line  97)
+* asn1_length_der:                       DER functions.       (line  11)
+* asn1_number_of_elements:               ASN.1 field functions.
+                                                              (line  91)
+* asn1_octet_der:                        DER functions.       (line  27)
+* asn1_parser2array:                     ASN.1 schema functions.
+                                                              (line  31)
+* asn1_parser2tree:                      ASN.1 schema functions.
+                                                              (line  11)
+* asn1_perror:                           Error handling functions.
+                                                              (line  10)
+* asn1_print_structure:                  ASN.1 field functions.
+                                                              (line  73)
+* asn1_read_tag:                         ASN.1 field functions.
+                                                              (line 309)
+* asn1_read_value:                       ASN.1 field functions.
+                                                              (line 246)
+* asn1_strerror:                         Error handling functions.
+                                                              (line  24)
+* asn1_write_value:                      ASN.1 field functions.
+                                                              (line 139)
+* libtasn1_perror:                       Error handling functions.
+                                                              (line  41)
+* libtasn1_strerror:                     Error handling functions.
+                                                              (line  53)
+
+
+\1f
+Tag Table:
+Node: Top\7f905
+Node: Introduction\7f1937
+Node: ASN.1 structure handling\7f3211
+Node: ASN.1 syntax\7f3451
+Node: Naming\7f4602
+Node: Library Notes\7f5519
+Node: Future developments\7f6342
+Node: Utilities\7f6636
+Node: Invoking asn1Parser\7f6856
+Node: Invoking asn1Coding\7f7312
+Node: Invoking asn1Decoding\7f8024
+Node: Function reference\7f8584
+Node: ASN.1 schema functions\7f8868
+Ref: asn1_parser2tree\7f9067
+Ref: asn1_parser2array\7f9680
+Node: ASN.1 field functions\7f10580
+Ref: asn1_array2tree\7f10797
+Ref: asn1_delete_structure\7f11337
+Ref: asn1_delete_element\7f11635
+Ref: asn1_create_element\7f12016
+Ref: asn1_print_structure\7f12586
+Ref: asn1_number_of_elements\7f13209
+Ref: asn1_find_structure_from_oid\7f13674
+Ref: asn1_copy_node\7f14151
+Ref: asn1_write_value\7f14585
+Ref: asn1_read_value\7f18503
+Ref: asn1_read_tag\7f20650
+Node: DER functions\7f21229
+Ref: asn1_length_der\7f21432
+Ref: asn1_octet_der\7f21854
+Ref: asn1_bit_der\7f22253
+Ref: asn1_der_coding\7f22668
+Ref: asn1_get_length_der\7f23317
+Ref: asn1_get_tag_der\7f23771
+Ref: asn1_get_length_ber\7f24316
+Ref: asn1_get_octet_der\7f24916
+Ref: asn1_get_bit_der\7f25611
+Ref: asn1_der_decoding\7f26289
+Ref: asn1_der_decoding_element\7f27250
+Ref: asn1_der_decoding_startEnd\7f28443
+Ref: asn1_expand_any_defined_by\7f29716
+Ref: asn1_expand_octet_string\7f30529
+Node: Error handling functions\7f31492
+Ref: asn1_perror\7f31708
+Ref: asn1_strerror\7f32125
+Ref: libtasn1_perror\7f32648
+Ref: libtasn1_strerror\7f33038
+Node: Auxilliary functions\7f33494
+Ref: asn1_find_node\7f33686
+Ref: asn1_check_version\7f34278
+Node: Copying Information\7f34876
+Node: GNU Free Documentation License\7f35129
+Node: Concept Index\7f60264
+Node: Function and Data Index\7f61370
+\1f
+End Tag Table
diff --git a/doc/libtasn1.pdf b/doc/libtasn1.pdf
new file mode 100644 (file)
index 0000000..5451c91
Binary files /dev/null and b/doc/libtasn1.pdf differ
diff --git a/doc/libtasn1.ps b/doc/libtasn1.ps
new file mode 100644 (file)
index 0000000..6404b4a
--- /dev/null
@@ -0,0 +1,8230 @@
+%!PS-Adobe-2.0
+%%Creator: dvips(k) 5.98 Copyright 2009 Radical Eye Software
+%%Title: libtasn1.dvi
+%%CreationDate: Thu May 20 15:04:32 2010
+%%Pages: 31
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 596 842
+%%DocumentFonts: CMBX12 CMR10 CMTT12 CMSY10 CMMI12 CMMI10 CMTT10 CMSS10
+%%+ CMSL10 CMSLTT10 CMB10 CMCSC10 CMTT9 CMR9 CMMI9
+%%DocumentPaperSizes: a4
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -o libtasn1.ps libtasn1.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource:  TeX output 2010.05.20:1504
+%%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
+/p{show}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
+/UniqueID 5087384 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
+/UniqueID 5000792 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 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 69 /E 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 84 /T put
+dup 85 /U put
+dup 89 /Y 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
+A6800310FF9AFEBCB6AF6A97107FBBA08DFB4277C1F9CA667F9BB3918B968C60
+60C7D857848B3E60CADDB111672FEBD568CB936E21A54A5667DDD9E700D889B9
+26035F987377CB5EB50F0CCEDB7B5F94587CB368BD78C67113E9FC54A8869A14
+822578EB8996BC2D3AE0DB7885F389B7249A503C83D9E582D5B3B96CDCA6A201
+397870CED2F9FE22C284F567BC9E1DF0DDFFF87E81E5CEA95513D8D12EF51D37
+3AD38B31F8799C7614BB83A117CDA61B38D675D8F6CB97B0B85E4C7ECE6B8DD0
+850CF93925AA3255707B84E61896932EE40ED553CC40C39CC41A6648632FCC74
+1BAB46410ED4AC83296FB5A891016306528E3A9DAE889B881ABE06C6C9A7099B
+AE1BFF1A958BF222DEC7B1672FBC52118B778AE3312C3D0033A98F9FF76E1F64
+C441459E54122FA762C916E637513A7E885102E38604EB9D4DFCBB1309C64F40
+9F1BB18916200D4A1070445E6F16A2C550DDF565E2F7465865C14DF307A630A4
+3D1611C1D4E16D0E8928F95EF2C050983D9C77616D3978CC9BB72B2D540ACEC2
+69453E6D84F8CF7FBF3817693EB19F86FA3FF876B9F8B1759496FCDAA17C39BE
+F65ED35C6D8E313A83AEF4D9E3D82BA9D01661C61F53EE20574EBF296A65E6DB
+1F7139AD528EFA12D3CAF0134F9EFA034F49A55241679D6C06FA2F2D5E672248
+8D3450E1695F45E30BAEF8C8AA1CA91400D0B8AFCF1261BD742DBEB3426A8536
+4E1AFB8BA84B936404111D8D3705D6D6DADD53A8A1F6FF564D6302AB2775F3A9
+720A421DB3A9783B0DD8C5EC49C13122522E0BE3199155CF5F4BFA4CC56A2810
+61CA4A34E315CF2E29737ACAD5B2561CD73F16D35FE80BCE2BEB490203849396
+BCAA124FA153C47082F4BF65F0CCFA9BF483EC601165C68235F5A92D95E0FD2A
+41C96727B9A66A19528323A1D465CFCF1F19173ED0CBAAD005F2857645E0AE88
+BAB7A649A43392773DFE0BD1F88C1F71911C6B6B8EBD0A0E1E10B3B479E8E241
+8F174A525C978737AF542B4355CEF32E88C7A9DAB7A3167E5E0BB39C185C7312
+55609B5094061AEA1296DF7C6904725000A98689DCAE949A5196C843BBE9D26C
+0661537B4C0B7B04A74CC14E4F632F468633229C3ABE1908DD959D9C838D9C05
+1E4D4172FB384FE8CC7B85D273E800810ADCC86D948792385B22B27B9F336C72
+939C6A9CF0F139B5F142C82B0248A5B18C07D0C4FE922F98D71C78561FA0917C
+59BBA2E0225A34E69F184F6C92B3007410A75A4EAEE0E30D69BE2E9AF805CECC
+8DBFB33F0666811EC31284C0061EA7062E1616C52977A1BA05A9EC52BA4DBF24
+D0893B473994A13A83A3FDF47C4C0D9CC64331381E84C31436A5091EB18A7AB9
+4E2C09A0D12BEE1B56DECCCA6F76D27C5B34049ED57DB271C815027CE94E7315
+DD85BF9CBAC11767D25F22C85FADB91A09182E54739120B0C1978644450B18D6
+9F850E96CBA38AECA951E68F2ED9ABB7CF135707DFFD01442E3363B94118D352
+4E978C2437F4652FC3F2D18E7B64664E8E7AA0A2469B32F3CCE0C50DF719AF1C
+1EA02FC65A3D895BD963081DFB7769F4C22C19894C159D4F66B7DD204F862097
+99B2811584A6CDFA99A34FE040EE0D1034D335B012AAA74814F34A92003FE4EB
+C4D5D228567EC26C686DF95FD454630EA4DB9619059947833A9BA5BF00882C74
+D4B5EE7F006C4A963D6E69BC3AF971F615EDA5257198968D76FEF2BD2518EBED
+DAD1E2BF4C6E56007AAD99CDE4729C7C9E27902D77BB8F38EFD4D97EEDE81E83
+50DAF9359F475C376EE331002F8C677C4A5A97860D9D16A88B17E2144B854C60
+7499EC3E0A7D374BFB16E903EFBA68967D3012FAAA3A6908F59EB4D1CD45373F
+C44C8B8C99908B0C5D3311B069045F63CFA8D0331AE8254EEF8D3BB949D43349
+8A87DE9103E541662F9E650CED06881058D90130D92781C6525A60FC269F85FA
+D5AE6D5D1A935DBD0E7EE620253DB73A62FF4E61D2CC2260E3E49F50BDDDF8D7
+8573F31AF8F5445BCB86DA54FD4DD9D87832FFA02A8982D577F20C01471023C5
+E8F77906DA2BC097962B1557AFECB93A44ABE2865B4B36E096A0967A3AFFE9E5
+F1C8D3ABE526D64FABA6EE6F335674CFF7B7562B2F7FD7539D071EC7438A3172
+1DBCEE52D21B33560D2F6BA60AEB26662BCA4EA2CDD329B66ABCE2A309D23A39
+0D9D3BF5FADC8400EA3ACF5B3C41FD7C31258FF3025837D660BC65823D51D593
+EC47C353CB969A39DE9248115A3B15C733033EB6E9D3F19101C33F1B24B7735A
+0CC01EF5C90BA7EFB2E2119FB56F53C78357A78FACA587F3A21A9713F2BCF2EF
+D8CA42BB66C3F12C67EF5B5B601CB87FDFF66E18CC73F90805F2EA34061113B3
+50A40385449C9FB276731F95F671EC6B6890CC14565840B3C71C892C7883B2C4
+55A45E0A0070F087EBBAAC7590114D4EC01D0FB2C32533E95462B0295FBD689E
+5FDC0BDAC6ED0C6CD3FE5E0747461D6B0B3C7D14C89A9715154142C3B5A7690B
+72D0A4CF0DAACFFCB3BD8AE2BBFC7A59A75929E849D1DA564EA811C76C944ADC
+A07C60D497C8805DB40695866B75799989FADFE7B80B396BFC25D02B35A6AD9C
+347D8B64A72E07B3E4330A9BD425CB82AF8635F61F7D294F3FBB630D668EA8AD
+8F6EA519FE0729FE4ADEB24A97B3E0479AAB6EAD10374E2A751C3D22D195822C
+B795EB3F824497816406961155D68AE55D3CB44AA10052CF92F3AC207A82AE63
+6337AD685CAC6B5B29C2E262ECEB3048B1E8C57D1DA068B023834C5FDF2ED895
+B52EBDED967F71CE9CACF50590306A05D9C810B257FF4F826AD4F889A06155B1
+D606063C99917F07B0D2B2F184096BFE35100F7DAA613F2443DE081858D3932B
+DB61CAB29F0D6A1BE0BF4EDD361D82B6FF4FF52F8F5567B8C778035155E568D1
+A8E9199A0DE1A97965CEB2D74D719C85EBC2DCDD83B57308DA2E3645EAB9064C
+E7BF284A4F8733562049AC0B4C8FBF00C5064B21357B9332CD90ED65145808EB
+64476AF5FABE7C94EDB0AA8E8C39C47A3F1DC0DE266E212C0ADF3F8FB2BDC406
+EE663B1F02BFC798DA9B9FB01A64FF684E3066E4FA4113FB0930224685E280CE
+C5B7292D10382AF3DB09BCA50AB856AD6E558BC37E30490D64E619C16F6A498E
+E69F976BF21DBBC02F10D80D50F05024C60695C2F4EC939A1810BD6AC7BB6E3B
+C2B1A5D04DBD88CFC49CB38AB6A2CCCEBDA24EE4AF00BDBC8C8E2F263490BC1F
+079BDB8B394E7FC3B56EAE3BF7754E02B4F105219384FD748D0003B480F4962F
+562C12AD64C506CDA6294DB990ECB9F2FF04D51F73B3CD30D7AA54DBA5113A1C
+089A944485E3D30398957FBAECEC35649575388D658C0FD38C078D70899B86CE
+73AAB2A6813574EC51A60A1551A71834A24FE09353E1CE04B7392C7D39FF9382
+77AE848F9E38CF4BC22EEA6C4627348CD6DFC9CBC52C92ED74ADAE59B3C6145D
+A346741E4FBF5B6E2B4AFD85346345BF7FB2E690C26E0C37CFC4DF976434914A
+868C5724DAFDE26EF6AB2A470FEDC16F1834B87D901D359214EBC1C74E9A10E4
+9ED67359783313244CFECB68C5EDA8F2139A69BC605654BDF050203619FA9A2A
+95A4EE597A8540146CF25B92DA15B29CA142C781AF02400A11B7E1355036FF33
+443084CD4FACE3F33768B55E9FAFDC02AE298586D44BE7C26F77898732852754
+5ED14173CFC37A44F8F211801AE729292E958A11C49B2DD784331EF7F9903A30
+8CC53DC87C0A331BE46B8F8C86FB36C18581EECB1973F6EFBFF55FE17025B745
+B47646B2829512710033EAF775A1997CCDFB88C38FAD21E88D4642E0CDF8DBA2
+4D180109FA18F7A86860FD915AC837FF0CAB6EBFED71A7468011420DBE0382E7
+A9B38F80F3E93A19BF041F7782E61C427987D01E9483D587E1C0515B34376CE4
+4D8DD1AC9D11CDF34702F98385A3896EA0C52C4D1A4A3BB48FAB07BB5EFEF809
+54489C5BDDB4393D9107C23AF95DA9EF04FF64D58463B5C91E02003F905BEE74
+CC62D0E073D575793831AE0894C6768252D41B124FF5E6EFC59A344BF8450356
+1481917138469B3F7988FE9FFF7390328879DDC16CFF98CB03A5B160C2AA5911
+B671CF1C8AD4FB3E3A6DA3A084EBC77F5D8810B8BD9D5CF8928B28F363276012
+3996932FFE75520D6949077ECAE805053934F653E2743E5CE6F9B71A7659219A
+A5FF85CCC35E136DC537A5101E3D1923512CB50DD6B6163E67C66C23C7BDB4FB
+44DF289417FDE34214632AFE34554B20D9B29B608647FF510A0152F80B38A3B3
+E69C8A6F2405CFD24D05E95121924F1C542DBBE98D36B5D21D6688426B64298B
+9F781B2170F8E175E1E91506BC08AB3E52072CBB7F97600EC2D69AC6191ABF25
+40A4BAAB13576B5C89F8BC2BA60417314A62C97BE0360EC23282E81A1A5D0B8A
+0F7732C840C5A32EC9C06D45B5392312E9AADB4F5D63F8D3C28D7353D1EA6B34
+9B8851B1E1BF9AA86F6A45188F12F187A89149467CC8CAAC72B0A2377F5EA974
+6102D9F4DA8DA974E7D27D22E5B51631316510E82739B2BA65D30A77563FA96C
+3506F183F12FB1405B143D46618C0DFDD28C88AAA762E9C9A3CB0205FFAEC3C7
+183F34A8C489E9101B738D0627F2FBF72D94A1C70BA79AFEB15A399D0DEFE973
+B9CFF4E257A27A04FAA335857CAF7F37B375CADE84AA03D33AA3F5A7C4B890F5
+6742BD8D4FA40B6EFBDDD1E8620E83206EE23CEF6668F39C0F7DD65538DF34BF
+42895CCB6311BC021FF2D9091869D36C95DEA4FA14429422B17D896685A79BC4
+1784C36202FCC49368044DEB529A11F8BDB4C2B9C8DA4A9588B2A62F13028844
+A4D7B406E728F81D3CF0DD69789D8024D764B8635FB4EBBE168A58A7756CCD95
+1F658492EEB14F947814CE5AEAA1A52363B8575DC19DE69F40BF3286F988BB40
+5329BE2904D255395A614995B2BB0EA45137273C906CF96134404D850C558FE9
+41822FC34E0A6D677D6C7EB4021E61E897AAFD7354E366834C09FA97BEA9B2EB
+ED0F537080CA6CB27AF1D88179CDB41535A6405422C82D5C78A504C0C7CB95AB
+ED0D48FB9EEF2514C20F42A12A36F1D18B2C79C7ADB1878A99BAFCBDCEDAA325
+E6250E21CC94D8288AB06C60A089BD63283A527042421386844BF562288AA2EA
+A52882849C3BCEDA58AE8BC4774BD5A30D1827179CF60EE51C0962B11355122A
+01C59D924DAC73198341FBD86037F8B468D49D7A0D605A7B5B3603DA08DFEF78
+9B9A28708F34C02B8A76CD150DE92DF2057130EBBA4DE6089A981F40C67809A6
+5626AEBA0330A075A6140027DD2AED733D58AC4983582F02092B49D292E8FD7D
+A1B4299E37DBA39F89E0730028EDDDD8300531A83684D0BC708C1926617F4377
+A1B41F4897574CD5ED894389EB7C0B18D05F1996591EFD068B20E8FC19FDD9A4
+DA30B9AC9EECEFFA8A28EEAF29CF02F0CE139B54EC68DE8CA985C2A59AE20587
+A7B1E2DDDCB2BC1238DCD7DDB66B61B46714F154E243F7A49B9327FBC00D50D9
+BD3127294E06E5AD58E07D76BEA5C80880DB308F07CB43498597F5152D79EA1E
+0370E8152E1D4203869F4262E66ABC9E23EBD979DDF07964EE98C993DF0EE776
+C07B2AF680B4B650A9BF1B8D89CB21C9F540F60535CA09336A90F30CB53517EE
+FC641835C769346CC77408AFA87DAFA8B1BC3FF75F9FB32C30BD9A4B6BAD25E8
+CDCEBE3490664B3AEE84B61290770E748FD2A46358A6DC832745410EBECF5C47
+052B00E584C211049C77A981286377E41152E124E657ECA4E6C8989FA4E32E04
+7CB281387C30E30A66E931CCA46E51E5EBDC49AD2F805600697348132A431999
+65743BA537D13C00CD59C24172A31804B3F07CD7DBE3510557C9FF7E1CD0C697
+AF232B35F871D9A9CBE1115D4126C76388BBFB32331CE7AB4DE2AEC976BD929A
+F9A8A412CE97F1CBF2514DC1514C47F1F7ABC8DF45F1AEBD87A9B35011A4FB1C
+75F551B41D2A204D9996FF3C0732A07039E58F38975D50533619EBDF56E461BB
+FC6618040999E2BE506B06ADCB5F3274B18BFE102554438B1F0CBA29AF7ACEC5
+010CDA58D4290E6F1ACCF98DA4ED33D419F56D52A1BF58A0EC6A359966E2DABF
+0EE566591ABEC674EC766382617CE61B75482F0DCCD6BCC756A0455DAD8B3A0B
+51DD4A209F436A0745300B2394AB2F1FDAEA58F376E266B873C7FFF7AEA9B466
+45BB8D4F14B54AAC60DD08A13EF1A69D96DCDC33CCC41B3FD0CA42A097392B39
+12B7B067F7B9DA6F6349F7BD256293EBFBEF1509FE09768B900C6C07A6BF3854
+76E0B50311C4CFBE9EA831AFDC08C2ED9526BDAFB0043381277FB425C8626A7A
+C52AD821F711DE13963346997CB653C6BA6F6A15144B6372EFA5D9E5705BEAAC
+966BAFB1C5935D93C7440244F07CCEC9A5E2358978F89518B311E8BC201E8DAF
+8C8B3316EC50114977C1FA6315533993A5BD39B24E92C3305BA3996EF927E0E8
+64029E56B07D068FB8F8E841C1EB7D42551D6243CCB5A35CC47B4949AC9BA23A
+70678712EA349F9BE7232BDA44A031DDA17008A3F734E0EDC575DEEA0C73F57D
+D1F298DCDDF021E7E66A0A1E696E642929D1BF6E197D6FD8497EC6AD35341518
+930C38E02EFD5FBCD564941D1A01A6BE8712B260846383304BE9336E61A27F7D
+6329D03BCAD652FA89D71750163595EAAF53BD604450FBEF93D3A757B728A669
+28B8DD1ADA2C477D218CAAB85E624BE23611E81CA0EBA06C609695E141987FDA
+2FE118C603E24D0D13622EE53680A012B5CDE63A06468BBD4B30B4156E347B5D
+9464B30956951F38151C08A6244619227FC1A259950F116D4D17EB501F24931D
+636CDC88733194C52A4961835076A1E334E56FA30539B014462A260ED11244C5
+1141203EB020709F089323F6445D6A6BC61AB04F43E8DD1E24C73BF7B55D769E
+020B56808DC03BB1BD410CCCAB1517918D2E73C3B5E739F5738B870D363B5F24
+BEB6031EEC937AF8C3FDF7E8836C9D6DFBE79D4300BFBFC2DB69A4DB8230E513
+2E8FEE665E1BE5465CB7B615183196DF68220A1AA9B6D86B855C379231BF3911
+3A583766F4B2F1DB03CD550EDE273DED7B95AEC902D27EF7415ED39CF2EB5507
+2D21F57E374CBCA6E337112B38A34B534F094BF6ADC62E5AC549728A22175AD3
+FD3DEDD4C8FC2AD36E528ADFEC822E38EBDB6D17E611F4D64EEA9F2E1CF5570B
+9C49B3C119DE30510AECC6860EF7A2CFB164F5CE313AE63F5589A13AC047276E
+FD4FB14C86AF3492AE2C42A3275E7BBF5B77FF3CC51B28CD294687EE55691CAD
+F12DC66B6AB0F767EB18E0F48147C368FFF0A888D7653F937B043FACAA1D9384
+2835E04E285B640A713B0BDC78DFF769BBC6250E0A161B37541ACEA83C80D27C
+11361759E0DFBC09808EE67BD3A0F6A71FCB1CCB56E2B8E0F994740CCD59EBD6
+1766427433F06FDBE3500BC1799275C20FC56F1779EDF4AC538C728AF09F4946
+823AB7E3C00220DA47B964FE0B67C31252331F77C8F49D78AA59DF9211D159ED
+45AABBE99164177F7C3A57E9B8507B874D48127F94CD244AB757F47E1AD7B8DC
+2D55D6C3301040755B6D5ADDA30DEE05F00D1EC27914A87294973E4212F58BF5
+3D781DC420D91360C7C6C2684282153D7E2FBF672279FB45109D225043A935D6
+29214BD5D50C14F2F6253A079106E5F5F6FE5E90E05BE4311FE033AE15ED4291
+DD163609FF3BCC7A233DDE0A8828E9C1955F7C3C6605B5AF0B3C79E72BAD823D
+098720AB299EAB77CC0E162C0D3F71C758FEE81B96343C18B92AF7F79726A0C7
+157AC9950566201A027ADC3997504833529DEC993AE786234FF1598C66187948
+6D1993C171E38478332CD7405735B2B5DB8ABB519945A1960CCF3F17CEB32DEF
+7CB4A10C0ACCF5CAF91708195649829DE4325E4464D5EBC7CBFE99432E868F65
+CAFE9027D0327FDD1B8EBE65044C3BA6264E75B041333A6DCACBE6446E5D3E92
+396931A883C8CC9D3454DDA8FC881C373B1FFA1CD0F872A45502B26F14E7F32A
+F566B6CDB0B47C8D99D2D0BB5D73FBBBA3F5402E39C21D8E1B5DC4290FD04E94
+04920CBF7C859625E92157548C4CA07B5DA6BBC8BFD2CE94ACAA463F408C2AB5
+B70E19BE2705F5462F633C62595F9FD744ED48158B1231305BFD0D1DEAF064E8
+2F3FC7F3F23A81B724AE4B4FD305606D8F35D780C30DDE8E8255E0411C000F79
+00108C985E5708F3481094537B9BA5D36E32CE9E0897D8DA0BBE28809D90FF6C
+825421E6EB24D4E5BF8EDCB6ACC582CA038FE81C1FA6DAC23A7C1B7AB899B429
+CF70F8124F4621B2F9D0CAC673BB1519F08A955392E6D4BFFB8049E87BC41D60
+F2797B3C912485CAA5C72D327CC42778574AFF54D4A83ACCA49AC3F0C1C1FA0E
+815B88B7B94D47178BAD527AD785EA6BBF8F7DFACD2BC57992E0A5788F61A800
+69E181D73384794FAB42E851E75BD316CFD6CB7CCBF4DC98DDDA5B1C1BDBB3DE
+EF0034A963545066F967F48A0300D0E787C76B815C05AB9365208DF9D137221B
+A8550D9ECAD7B4F2DB5D798A54325B4456170E9ADE553E02D7EB44DE6290F5F0
+1A72E278086A89C1CF4606C0719E8947116EB901A64E9DCFE6D470F3F826645F
+492CA12DE284077471FD437A0F82E58A41488EE2D08BB2F816F91C820183C724
+B553F4A1E140940DAFA691D82D1C810BA44BC36337D2883562F0AE91E991069E
+B4C2C0D26DD63DA162B4982A58260ABF7A3D2C6A49779D2531A0BDFFD8340C29
+07ABF8D7945427A33C49D3928B4A89C5DA513674E85FF6F47DA51611D9D649E9
+E137C5F0063C18786056A88B4E65006F977B1A698983F3743F8E1AFA6CBBC256
+03E17F41F507CA4F6D2C4BC7F3D1E370B133A9077EA97F39DB1EBB540F75F846
+9EC88E1065F2EFF2633DE696BF686B2B477140A9F13BEC2C38D6A8D28B741869
+FD3A33D749E0F3B15E217AC476243806AA09BEE3F07B914A0E2D8F5D4DCF7241
+57AA8F7F6522C55F772BEE0E3DAFAA1158AB0DA94A14550725BE6EA1BC3E4BBA
+0C75B6887372B3BFA4C7B2392A8DBA2E17C19C92704349F729F2D9C251D10479
+844ECD3E28D4DB3A645C29C8390C0C95408CCDD6D9491E62A24400B84D170B79
+E3B5FE7C8BDE721A2CA38EA95EFC45A8F2781F23CB73B06F42B86EA3A48D11B2
+DC5E7F91ECBB833A0B2365F3D725ADCC9F4650FF8B223B1834D58B93A5534030
+BEB136E27B2B4312B5B596BD637E01B0E286C17744F79821733CB7033B75E031
+6C5E352F76C4B73FEAB54CD615F60425350E79CD1CE9B8AF8AED6281DEABC0D1
+C9E0BBDFBA285607218B926201BD9131D62111FAF6AE7E1DC3CDA1B958EBB458
+00DCFA240DEE526B78824E4CD8130040152BA6A8505F07802AD4A50086B0737D
+F29A3AA86D790C57899AED882F6CE1F02D6D6776059559A88DD92217C875E490
+8D78990C4073AA23BB3C49456627E177FEDFEF277A39EFC11ABA2E43CE2D0B38
+E3AD54CAC7EA14DA6E8093F59AEEB45C25F718328D0801C0D4427E2F1A9D15FC
+0B30515D5D1C11C47D97513F9A920A6016CE9C378A31AAE7DD51C83F3AA41DDF
+61E2DA789A5F6A732BA4CC2A1C2E8CCF9950DAEE6040358D7F03E5CAD26E4950
+B5C6CA0AC4E0B8F18CC386797D2A3F36012689E48F0DF9BE2AA99351BBEBAC95
+2FE4F6AB6C50305AAA7B93F670F04AD41FFC09F3D34737A5B85A2A7AAC2F674F
+808782C0502C8AABBC633A15B41B982812AE89EF6208CE1AFDFE46FF26F2E531
+EC530201FF359CB169C9E14C5F137D56C7792F903863F9FBE01A0191D92CDA1B
+70ED4A1FEB158896F531F28F938944F08A33E432677AF15C5DDF0936A8E9CFEE
+FCFC213EB3FB577DEE36D864A9040CE637E9948D6C9611D1EF77FD65266966E9
+1EEFC3A13DB2B2AC3C1AB7AD8382114EDC9FE411CDFB9CA8A0282200D23F13FA
+F2A11BA851132EA392FBBEC238FF06F6918704EA4759407CDE830447D8B693FB
+CEF25FD43B90EB6D88F0F05C6FC56D978F6B4967C8260DF82791BBE3F918E332
+FA2D37828DF39EC0DB10A06E1DF19746FAE127C7FB054F52D60A40CDC1585854
+98856DEE36FB2669153D5D30E0E63880C90DC61E789EE64CB9AFA6E8357A7EE7
+E75B3B3987B6C296BE620C3F1BFC465C3450EF520EF1A720F3A39D88C9920648
+E6B921A1C2B779E524170DBAFD27E7B1D6DC3CBD8C917122DA528BD236DE30A6
+4A71256DBC109C9DCC5A862E92CD862957A78C82065E8898E3F51D024F7D32C5
+72E9464C00AC025B1892869D1AD6DD57936EF3F3B2F5695CD3CBBCCC808B1081
+7DB77EFD79B8E1376AC5902E39248B3EC78F60304128B2F45B7223323A9CA74E
+C70B28B1F74950E0D37522E3F8EF38A0E069BE3A9922EA09A58918725163EA53
+A6D69502C2F3B195C4410F2347A36C2982A45D4F40460269AE37BB3B4A0A6E09
+AFFE13C7401263277FB1245CDADA80E934D94FE734E5A0934EF14F6608FDFE93
+FC225E6053CEE3460227AA79BBC1ED63FCECAAAC337F87576E34B6F9CB631001
+B1C7865A365CF38F380A3FDF0BDC95C7EFBD6F4CF631C38F4342F9B87EB0DBD1
+50A5C4E44700A4B12A2E790236CEC293C9274A7322A76A0B84328B8D5ECCA30A
+3D10B0B03BBA7D1704C26406FD4BBC213BA2F5A805DB6215A4F39DA97B9F26D0
+8E7E22ECCCBA48D4D51A1A88625729765AD2A0FAFE95547168A6933DDA289BF3
+52B6AA5FF6B21F2DA6E9FAAD4B253123A197F1571DEDF815A72F040D4C47477E
+70AC73A9C68588F4DC05E3FF68FDFF38975F6729028FC7C5A1E1482500F4F7D3
+E08DA4019C08FC7103829B09DA631739F9F32462A0B5C115B88BB11CFE2F6A58
+F7DA4DAB75E30F21B4BF72FCC8F07C0336E0B3C29DBE7626C7C86D2574390C05
+830E75AD419C354D2D6E094E537E3F0058E7BB869B78DBF29EB2BEBD158147F1
+812E35DCEEEB3D33067F065A035E9AEB97B6BD5294397F47A2E18A9965FA87FA
+8D97208D42A872967E8D7ECC55221279F34C14FE4D51025EF8B6CC488F5D0CA6
+C9310F16F43DFAFCDE1361C7F4BFC7BCC6A73F7296DE487EE633B40FA93256FD
+D82EFD06F8CD364509D69DF96D26B201F5EA3185E9995893E1277EF3FD9ECFF0
+B962E0FDA9825C04B93023614BDD9EA9C0FD6B1AB9FB6F09A00E8E691681B0F6
+A7E2578D97210D30DA8F7CD8C906289FEA318BD6B90BBA4F880A7E095B975A6B
+38BEA1D5DBFADA4A6B1838D4BAC98C2646DEEF55CB5325EE02A7099F1ACBA6E7
+A35D219AA122024BA6393086D4C107E13A418BE130E1113904788B137CAEB393
+6CC3F42E22BFAF8E02501A0A72AE8414AAD9B4792AE6C05676D17A95099DCF80
+49B651E82849C00CF1B6D2CC3F84EE7936BF3525F8DDD2ECC3C7D7B1459DEF8F
+AAC7F043368084A736C8E3BE6A27570F3A573C0806D47218221FFD59E46E186D
+B25D66CE73770F2B211FC578D9B6D06CEC35AAA4100ECC05D5DEF5DC5E452892
+B27B1CFCB60786B3ECEE7CCE48BCF5422DB52F15127C1C5E882BD494F3F4C282
+094894C9D5676E9BAAD84498CE0ACE622DF01E18DEB6DB13048A7195A14473AC
+5B8045BE053920E5C6BF055D691812D8C3AFEC9439FFD445B23CE954AB894972
+110BE0F016B0EB20A159EF8A44820ED2D15426EF3AA372854CFC403970C23070
+846B52984B516A1E512306483D5ACFFCBEE6932FC5B2A2531F75F3A74D65B98B
+401E86CFFE485566A3AE340F70F5C3E13D6C75CD69B5BF9B97E83FF9E7BE8A44
+498292824AC65CB498DE2B05E823D12EBBCC49FCC3E9B290A28CF7539B7EECC7
+9C49597BCC03898A9E4DDBBA22968857199F2AEEACC0FC3DF59759D199419C49
+6DF1AC2F558A48CA1C030CC1EDACEA2FEF0585B3F4611FAA53C8DDE3C192FD36
+287CD03270B9C0C6551A3AB43990581F053B59
+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
+/UniqueID 5000800 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 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
+50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F36935D325E5
+5798292D7BD972BD75FA0E079529D3B1F11595ABAE42D2B38717C0D90AB40622
+68AB011ECA53F66818B675755D1D434F1B0B6E1EE0059A0D27A8DE5FD4644EC3
+AB2BD43722501D5F042B7A31237C4625BE2DAC9D090CC1C6FC76BDE5BA9977FB
+F3DA696DC9E4D1723923C54291A4B226056AC0A50974FCF7DFA8C95636C21904
+D4A9E1508D4F3C7BE2579F0E9F79A89A1778F5D373055959535C6E5BC77FAD42
+B0D5F7F44608B56AC8C8DAEF7BA9CC7E4C3466A5E074B8421ACBF1A2C54E558A
+4BCFF2C79907CF10D1F246F989D96D574007BDD1A6D8C863ACF45FDE610F696D
+EBB1C29ABD00AC45735EC0CB3B3D6AC3916AA20A9D5460DB88E4F4D6FE264FE7
+540C96826159652DDE89B3B3A3A19594E15F861DBEEAA0785842115FBF42D7E5
+5ABF8F04E33831829ADDDFB6CCE864958D530AED495EA5006FAC07EA58E2E7B8
+E93554FE9FB44F78A6FFB38550F0057E8A05A1371EC75A3E6BD9549C4305E78A
+F0299948B5129210289387E5A3C701D6BD986F4BAC3EDF1E37A41A70F0F613A2
+78F650CD5CE4D0EF7DDDAE639ACE67FE6D9693C96DAC0F631B9E4251B6AD3142
+72292EFE4FD775F89207BE44AC2CCF84A287F15C76081FB564133AA04D0BA27B
+F4EDEA89BABE8811AEC78373E6AAE3090D8296AC9095EBEA15A0AA28C2B05058
+EBEC42B5BCCC48E12EDE11422AB9802C1C4BAD91C1BBCB087FF2E790C382B926
+CA86BEE8919B8D1C5B76EC0F779EC1A895514D403E053599509B02744EF416FA
+9EB10598C35AB9BC10AC08AD734A824BD60E93592D4C2D8C9B2EE9A05984D7F6
+F7C8C49F4D551EDD8DA5B465D8BD1B51E3BA1C8960DB3EA4CA62779C866ECC47
+1DBFEA875C5500E250112028F3392F3B7CD5C1449489658B78874B991B31B3FB
+941DE9DEBFA2D9C1AC2AFBB4CA4DB4C0E8E8A7E53C8B6CDCFE0D92F798B8D3F7
+5B2262D29D155FBE95CB9EA718DD03B0263246E17BB197A8FFB6DF6E575E0C95
+5D8EBDD8882268D893B6D06F53ACD3C99BB4A93F8A94446A8B8E874D13D2DDFE
+C83FC2C8DA3D76C419F44F3313AC590C258354EF67C8DED3DD0368B7ED7FA2EB
+2FB7C107DB44047AF724AAEC2998F3BD0123460C007B07B501C5DDC4648E6F92
+7AD99214E2DEF55B150CCE1C66F5489890C1C23C3519D7C3A8BE33F5F565E295
+FA89995A0BDB1BC4AE3E3846731867EC9CE37E9BFA7C0BBA82AB5E42B3955523
+C26007C7CE9275A1148B3C4FE4F989473A3C1F4BBDAF89F2DC10442605B67AF8
+DC869D366C723EF1814287EA73C3B7291266CDFECD205B7702FF1D8CC438D353
+B2618FC8088814A457D1630404654674D7607B0B007CAE302DDBE3BFE949BC5B
+78B264C8102AF3FEA35DB2709967EA487ADDC957335ADF438968EC9626F82568
+887F5457EA9BB1B2D7D5814EE613B814B7DB80614C024309113F9858B39F2D67
+20A87C50D86A300EE5643FC16D22DB272AD81ACF56EA512FEE24E652B266694B
+886A7D11D05D3B9CA8CC1876FA31BA72FBEADF927E6E5255DAF2A69A18DA0A87
+EA21C59CCBF632FF9C98B56712B797AF7D9B8095422478C2E7C590F68F699E83
+65DBC55227457E3C0306BAF8F0ECB58C180322714B666AD19B55EF94D35B1CB2
+F2D375008FE04414806D54E62EDFF07F5FE7BA9D93078F9A8287EC7EFF809348
+F24241AF01C4F940CC99D0FCEFFEE0306A6E3037C90865D5231E6656898E5806
+402274E0C00350E10EB2FCF40C63539F1298B69E85C66B208428A871B44F49B5
+587BB836A5EF14D634DDCF25F9748E9C7C923B4B4FEF0C8426CC47C196E9EF4D
+FB413A0170FF8E4CB5AC8A72DB35576DA0A83D280F15AD7AFE84457CC908099A
+295DDBF6B37AF4C5F1AC26D04B33ED0C5965E13DE1AE6461FD3966A1122DEE75
+58468B6D7F177471595AD559455E4C7C0203FE5A21BC85E1B5DE4060C4770B0C
+E24CE3BA31BC095237A8E97FE57442407B113957AE85CB65263DC7DDF07EC9ED
+54E1DE9ED55BD1C2A4A9472DC0E824554C74679BCA2225075BC44C2DDE800C6A
+7B09265D4CD7119A5BF2342B800B8642CD883EBE572CAB84D9F27EC9DC858C57
+72327A47B86671D7E8A7206FA4FF92DE1938D3682A9110C6613FF09E7883941E
+CBBFC2406E321C90FDD22C408FBF71D63786FE8E851D14735081EE073290E1FA
+2AD60E209E70D803DAA91D953F569C002E5262F57490DD563872A646DAE7B9AB
+EF169E3002E64280DE1C57FF471C106008010AE548CA16B306E93270D5BE6B9F
+0554EA79850DF6CDC1805AEA36DB19F5316051B676BDE5999CE5A46CEE248A5A
+84C7080280C75B6C4E52E8E6BBAD0A272533BE7C5BBDC8FD4ABFBBD66D98F031
+AF00A05E4D3629414E3B86192985248CE5714F605BDC1DD8BFA3BF7A996477A0
+4A0A7893B27518EF21073C183842E55455C67A882FF25EBA3DBCCB44E0A5010D
+0E27E42CF21612805EA792C3CBC8C7CC7CF28566045A5B59EF30AB66131ECDFB
+132F821CAE028304F9399047DDCD86BB154872C664D67F9107D92E5BEAE4A8CE
+2CC6EB668FFBCD7CEFDB4E4AEE2618B6EC786B8F78F41AFC0715C89F60372EF5
+94B2CA69BF36D740F4074E2A61CB5EFD4AE9A82583C745BE9A6297F095207310
+17C78C89DB743D1670EAC207142771EF32D0766084DCC83EDC4DC0D35FB61DAA
+CC25DEEA83FA4A49142094F0CDA6FE4D1C77A60FEE4AC50DC132718E74554F1D
+B65E504A15EBFD4E3CC7BBA1639FE1E6E683D2545B0E77C0A69D5EB6461C8C5C
+546E27588FC6CCD1FBF887A8A4160D1E9BBF191C8FFBB45889114DC69A5DE26E
+E64ADB600982F318E2D47EA0A13562BA054CB11FDDE97B668F8E9CF0D17A07FF
+EA4DE83C1898477E3E5C3880B8FE0712494105EDD82D6C0E13C8DE832D449051
+C317DFE4A2B18F6B0CBC86158F60B1E47C278CC221524BC8DFF2F9E04B2CBD9B
+AD148F57C6AFAC6389049235EC2BC2A506AAEF7D9871DFCF1775542356B628E8
+89CE7C7B8B965A1F20F8B8142C6E4433312D1ADBD597DAF6CE3412F0C66F5AD4
+889B19D75FF03414CEB2EFA542BEBE567B5AA3108F8D51BB8EDD2A170505AC0F
+CEAE3AAAA5B94B164AA26F11F2B8A2C8A5AD46E9632A1D8DD059215B80DD99F4
+0F5284CA3F7D733CC5C5E883BD08BD7C682239783E11CA76462297A0EF40FF22
+BF86FF66CC34338E34A799D97999A65AFF4FD6401B7D63B0B00DDA789696B22D
+2DF2E8355F6AC29ED32456210396080F6995982FA24771AE8AE66054A4FBCA0A
+90C8C72EB509D16A0E7451A3BF4F8D06128DFC5B16F8DF52402468581C752093
+538827A4678170C64AB204D90876ABD495AD63FD796D575CC36836A0E9BD92E7
+8D5F26AE4159CCFE773D9A9F015EABCAC46F49D44954BCA0123EABDFC771DCF5
+FBA3D969C1DA2EC854EBA79BA7EAC4776EC8EC0F281FE506F5F8F30E8BFA36D8
+5745858FCD752BEF278000AD45A73C2E7A9522F87365CC20548AEC01053815C7
+101DD466819159F7D3AA4123C5310667737541F347B0F2C26A3D6AFB4F850D76
+F1F8E8D21BE73E96D0A792A7249A3B6EC390D0E0333C37BED4EAD667E52C47EF
+8E95BAE21D5645CCA78C4D87C3D41A01B72B0DE621D14AA839B2EC8378264C39
+327558927B1ABA842F046E56EF5F027AA08EFE6A5A3AB3F692920BFFF1F204E1
+CD24A506943F44E6E9F9EB409ED25E396851367ECBEA292231976C160376E026
+6E58AA64A970CE06172B1B893FE3A1F8B115E9E789E979299D2DE91A55C0C357
+DFF42A557B8DEFC86F941BB2B6EC433FFEECCD560DEE13D227FCE13B909366B2
+26128AA7D491AB0C471023C5E8F7790682AD4D8D453B0DAA1E3A9D922F060921
+8D98AE114F63A888CB2F7A10E0B5C0B73AE7018A5FB9AF00C9F5C96CFE592BF4
+E2FAF9969381133AA7E2C6B9F5C5A4AC5CEDE5C1DCD3AD3D880484AD82C42FD0
+E489C54223A1933362689A81C9F9FFF602460EF0412BF94EBCB451433146FF08
+9B5CB588C3FEF4671AA2C2EC30449BCD733082E2E63F52361EBAF0813A317A20
+2343801FAD7111A3BC719F311277513426E3FF8CFC2B6D4481AA22D67587A19D
+BA6D9EAD709D7CE16C81713A09FC74FDCC0F8FA7EC4ABABD0EB0017509C6A37B
+6C999519372C771D0836B78A54EB8558CF45930CF95D84A75C27D777D59E8BFD
+F91F199E4F7D7189DBA06983A4FBDD13007ADB8597272389632EBED7ACE792EA
+19ED7543D0C1340E653A208972FD3A82785F3C72C212011160B4000677A1F301
+7199D00E84F3CF71C4CB6CC525FA2D559229A4817437D3DF79582185CAB49331
+9D503A6379C35397E950F4C5ED6E9FE8718C661B561DC4851F87ECF1FA3300A1
+70CE444762FB51F61E0EE5A1C0CDB9E993ACE7844C9CFDC90A519FB5A109CA9D
+CBE0BBE9610E54BA414B13BE7C30FE41AF0C1D619E63F39A7382C0C272AFDB3B
+B419D5B96EE889676EFC3C31591FE1A258AE52B625E0833D4E8BE4109BFA7533
+9824D0EA735B62C25334C95D7ECD216E238D64A650C61D8D30275963A7DC4739
+EBEB9CE48E239274F93430125A9C13DEBB739101C27CF91B4A78405E9226DD3B
+F5CFF9D9EFEC276986C4EC02F638D284D018C93ECCA1E878CCB4473B07C75544
+E2FA72769C3B546BEA59877EFF4C7CEE10DD9E90989D528D1E37A9A57A40D143
+9CD615A85C0D1762CAF97211AB8F9306388D193D203EA74667986CA30AA03FFA
+1DCF14856F39F26F85D7875D984F0F746697C3E4FD4068459BAFE4242E4395C9
+0D7BD8286D2E9146DFFD94A4B1601C2470A44F1CC5BF449CA64DE0C94ECC2FDE
+04C1E086B72B4A5C92C3E1DFFD8BF335C376766C9477CBFBF7A65BE4852D0D7A
+420EDE7FF91DD81B22DCD1CF74E9E2880C3239A4C96B1F7673E64FC97BE7D39F
+7D0D1DB92A9DBD670A3CBCAC115B2EA0FDFEBA8E4D1C56D30A266F4200B3BE1A
+B083F7929F7503D658F3FD2BEF9F6B7102487B56D391FE8892FBFF470111CFB8
+2DF021ADC9CADF227E03685A4985826A7753F30644FDCCA92FD03F2D18B22E9E
+004FFA75B8B379F2DCA0902C5405CA81CC060BB65DC4DD11E8BBC82EED3C0399
+E563A6D9111F2B5A2CB88F4A9BCBFE81D97B9E440F9F87DF039ABFD1F04980B1
+EDD1F226ABCAEA7FB3C13FE1431CA00BF18F0ACD324E4A5FC0C4ADE3345BBD53
+E27DF43423A7BEE12D97B2DA17984E32115A14E14EAFAD4E1E02A2A8B67FCCE9
+FA749C0B49126A0007DCF7E6715801DB3C633ACFEBA7414011DF1563076EC5A0
+037FBFCE2BFDBF1A6C18023817EF6CAD7951FBF3D7B2A3E1A64DA661286223E2
+FB64796B6530C6D73666C89817EB174D485867C2C5FE806CD445D0DBE5FE78A1
+86DA1F03DF21451E496E58109B484E13C35F9B37ABE0A8066BAFD6C5E6A19F76
+BE90972D9205C305F24271A0CA246C3C35611A7FDA5FD18B594AAC69665F28D5
+6A0F02820D1FF1D1179AC145F0DEE0DAE66593FB790E19A03627757A577FF4C3
+4211E1C15F5856965238138DE3ADE1EF9BCAD0B9D7F542B0C4AC36D35161B3EB
+6C40DB4EC4FC8989900C09EB33B1EF968CA77EF40E951DC68B73AE5D505615D9
+5ADF394938D0E811FA6AE08B771C52EE8287EA1A484E14A39750C4E5A9D38454
+EFD6D0E2EFF11A3891AA124469EF8C47D95BB5D0E127C5F3051220BCDE1BD7F6
+1643EC031B97FF73627CA8209F345C9DF0244CD985EDF7A77ABFEA5433FC3649
+21F67F4EA8828AD7A8ED2868FE00B891E278FC047D22B890D2AD2DA8268B42B1
+0CC08602F3B3A20D360BBAD75D9146A041A940B806EDE283A2BA186DC7D1B38C
+39C71D2234CD99440CA2DF7CE93E6FDFB017F06049E410306835BB8E9B53D793
+5BB92969DA4C2A673FC9254F33024BEE5A8EACABFD311A17F5E105E2E4254CD3
+366FD80717CCFB67BBED4E58CF2DE3A22DD33D90AFF8D613DF45488C62D0F2E3
+A227ACE770A01B3D0D995E2E26472F5939FC7DF99C0DFB4486C21E8448B12D19
+C3443DD3B325A8850A138DC9B67C46D8FD3A411792494B87CAD0D9ABAE5DFB79
+B3341781A4F4943731C4B2EEFCC5D1A6A9C8A17A8CE167227AA96A3567ADF293
+E4AE8E69301490CAB69D83ED5B48A52D663B6F749D50DE677135D81239DB4B85
+658DB20908CD7DE671BB753DDE6C35074F2254ABFB1A1193D0352BDE98499BC9
+10F5D180A2CD0D7B6DF8A969E31D1A54B37B08A78385E4139904E3F6154FAB68
+77FCBE12E3D3AC23C27B1FE87A912C088C8C
+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
+/UniqueID 5000831 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 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
+ADAEFB625EA966F3877B3FFEA518B809A4BD1976F150D90CA8D3F4CD9BDE66D3
+C4EDAAD03F38F51BCDE46EDE3886162BD9BB261372533ABD34FED03C561B0130
+BBF8365B2289D193B45CA39A7A738A7D573E2345E7C90BBECA11CEDAEE221757
+21D744792446A018BF566063ED4B286F03DC5B7F675B6095FCB023CF330B9941
+F4CA0142BE88BB675436D0811B54A389DAF3C6742FE17ED4B6760401356C5F45
+2BA5CDE430A38B9DBBA11B96B48FD6B91492F12108A2BD5DCFEC68DCAC37B01F
+34829D2B458E78C57342FA33F4B6C22F4B14CDF101BC10E7705E095C1D41FF88
+847F3CA10F0CE5B61C99AA12085390CDB04303DAE42C682E8D51D67BFC9EBDDE
+E875AFE2C97AA54CB9CF4CDFA10D20C35A742BD05BF2610E3AB68D03444E830B
+140637754252B2735488BD1E0ED5C20050984E08E6072690862EEA0EECC2F630
+D6CA6E30A1C8C7E69C4DAEC4C75BC4FC4FCC6FEF365C73A4B3810591CC6D443D
+E7642EA8B6141FAE0D255B164DD0487C92E379BBF2C611A0CE138D81512A748A
+2F8839DA6FCE17A54327BE9D62897840729E1D46929C96685080240A13FF3217
+C9641EC494FC47B30938935CDA0B2C44BD08847F22D693485AA6A0F05AA5B483
+70BAA7AA0C3A14A5B5343666327A003001D221D9DA18EA194DC23E1301D171B6
+7C5EC1EB8370AB77BB0356CE8F299013E1C7F5BD9C6F2CB4E6145581F78591FC
+D029F91A54F29EB0FE77BFB5C8FE378E166955B2DCE364A71C3AD33DE1E745AD
+417E727BE5D2B02EA3932545F95EA4399C4CDCCFB49709B491FD6A1EA2733568
+4FBB320505889D4C5F32D4B4F10C28D0A661471869ADE7B824DCB6753D03C393
+E76B6DE5DAD6D5834739E426F3A0C660D784E5CD386E6A5441FF6B41F9448A7D
+56B14E40F0174365321667F84977BC33B2050D532A40397BDA697361BDC535F0
+53ED23C5EFBE4F7C6794304A0FF6B67A7C8E8001D47D7733A13FC672D9AEE1B7
+FEB0DBC7355F635C86461F1AB2F7E0B9C80F61E830599F2CAE67E85468336481
+E9E6433EC7EFFC359B70B98035F5D2CCCA4743B9EF41F19EBF3B550418D0D913
+C48E9D62580733D4E210AFEAA5B764A521F387CDE8411E3EA996347642BCC3B8
+05A60E6056EF0FF34F028ECAC78C19826F1EED90B01A47DCFDD769D78458647E
+505492642104B550D057D73C986E2CBE896B52CBD67FC056D968AECB5869C712
+4D52E0A774F3681832AEE1EEACE1DAE31B779ABE6E760072522C4EAEC7D5538D
+701B0C048713FC390B5E7D9729A5078AB46EE62B1B76857F65A3959DCBE8A409
+D8297851791989780C35328D8CF730881326E2C796A9A3161CEF031A068C42DD
+7E58F4B3B788CFD4F05195B4D58CB5FDBF7E06C44280723F27C20BCD234D5E85
+3B3AF6D9A49324CCD96C1B82B4DF94E182EC62C9822AD4EE33BAF810482F3EC1
+FEC1B87CE6039C60EDB6A8D189D1715A7CF542CEE4197488CDC0433518271D4C
+53EB8238C67DD01F7DD2DF798054EA8CD5922CB9A8E3D5522F71400DBCFAC866
+A8B37C0ACAEE6E8F18241BEE610415B7D7CD0F02302404862137AE9C9F9155ED
+DA5454C584E89277F40048DB5662A9A5C6106D16A51D3A5FFB7EA197DAD29ECB
+219353620641D310BF811DCF8701967FC99B937BA3D369D0A18A98EDBB2B1EAB
+C0534B458266976D1D872DF0E2EA702AE79A273054C28425B245154BEEFF874F
+5929DC8179D2DEF24B84CD7F8FA385B17ECD04E71DFFB618611C967040EBBF31
+867A1AF98AA82ACB6FA1E65115D06A5D10701D8077C7F93343D5CB255A565738
+A3AC97905293D0B83DF381AC9C3E9FEABDB49504BA5D04043A4473665488BABC
+F9FCB4A97167DC394327F0CA3510F8439843B6812ACAE6774C523EBE7434AA5B
+0134719857865320EB40001E310370BBB0AC48E4950B2C817A48E2EC92D04524
+EAEA30188E333AB95902DEF3088B9CEA52D14078A3FB8ED012F36118F8BA671B
+6215E1CB5A619A4EF1B390CE97E99FD0453A4493EB45C3793BE85CE13AE0C199
+C388BAD3D4ACADE0086056F62708B4E3CAB3864F3E0333E615894916B7334E43
+4DDE99CB3C92155F1A07464C5D3592E89CBD25D67CEEF0C29CF2501D0F9BD6D6
+9644EBFE95F2550A15A4E8CB6AE38F6CA4B006FCB5EAC6FB4A789EB88F891A87
+1747B5A5700CA2D8E531BC372A101783207E7FA42A019992A5AE22BF55B8538D
+538ABD912CEC58C5A9C5F78687A3A777391FBC5CB37B47CB70B7F965264E78E7
+57F9C81CBAD6693CB97300FBAEA8BA041E5E9ED3CEC9FC796F71F50823F2D2B4
+7CEDD0C6562D1B0F63AC218689002D09276EFA203860CE660E5B36A02ADCE68F
+5643412C907A028843F6FE8D05B734CC8F525C9D4F2D007E12F49256AD5A6C26
+414C48438AF65FD0A116091AA59679EF655804DE72D4A032C88E70E965289014
+4AF3B45395F2762F9ADE1CBB3570E9689694F3D77E1DCB65BE20460D077CF2A0
+344D1C07DAF4616BD52353032F50D5C640805D78448DF7E49ABBD2B2025ECBB8
+57536EB7EDE67E8647434B74C4D232E9628D2175D49DDEFA99236310B466268C
+E318689AF662B44D804E96D1CE5265678629E079D749554EEBD69278A4EE8795
+ABE7495DCEA3E85E3C97C91887EFE33C90D83C267379A67F7C86D812C63B56F3
+D605D45C36A0825B1CB352FF1D016744ACCA4D55A5A58D8651D023499D14F911
+6CD4C962EE7CD9110067F99C5CA5697E539FB78027C7FCD05060A22E220BCF85
+F4E3DD7F176B4615F53025F126E9BCF5647954FEEAA6382BA7D715867638EEFF
+A393E427329612E791A950FC84CA9EBF084D4A67A24CFD7536591229E67E4410
+1FE5D2E74468416E9720ACBD535E13641F39B38376C676B01629C6C39CA1158B
+0021A3C98C921B0C5BE8EAEFB0F489FA59834981F3D70E70E2C5CC9DD905BA8E
+03A6AE3DA98F9438064838B0FABCBD83071C7D49E37DE9D6C5289AB2825A62B0
+2A761A7E1BDD75D64EA0C2800699EBBEBFC97CB7212DD3DFF3284A966415E0A6
+668C25020BBAB3D885303AA85239B69C9C083D9D6251F35A20F63AB04ED2D7E1
+AE49EFD44BD620CD0B95929C815D8D17F909E2102027910DD813F5E4F20D0FF1
+D4E4541547AC5A6143439EAC27E0F1A11A430373FFA4401F7844FCBCC0D4D0E6
+C5E52E03157831BD6CBA03C00D2BB80C6CD64D69E885AE62D4ED452D2F4A864F
+0BF0CBD86C2780AAC052423F590DE3DE4D6E39EE05A15199DFC75F1FC1EA1D1E
+04514C061C4FB7FC872E099B526FF927F6AD8BDAB25CDDACF03E15E475979B53
+1AA25A8C9F77DC958A95A5F9A3B2D4B1CD759E0257510F850F148351846AB8E3
+34AA5CCA4CDDD6520C36789CBB281BA7DA20F5976A4E731681E47765896F4108
+2859376056F823A6E40587935455C22B1AB003F4C8053D57B521F1520009744F
+091644AD51BC329FD432CEFA48C7CAE415BBD7362DAFB92D997836EFBF9DC5D8
+3AB26A0DEC90F175F0222334BB7B4E97A84AE6A01E6CF113262443AF464B24AB
+1174DD4AA1760800CEF690AE6888E7A1E82D69DCD65CFD57CEEC83A52E28F299
+1FDD8D6BACD3F9F38F92F3E98D086437F44F55B49483C9F49A776191E7F26D7D
+9FF8642E1D69C6E97640A64BC981760CD1E423269EC8DE0166FC053D1DDE7AB0
+163DBF3EDBB6F91FF217BF62CF640E673056D030303550B3BA9B9EFE3886E79C
+015F68BEA5EEA461083D72F57DE6D38BB0F91829FE9B550B0A0E8BD802591A92
+494F50C8A2E29B2D13B7F930444C5CBAE371E3A32F56CE10DF8582B697E6E7D3
+80ACDB11EC9E080B0826D6CD8E378F5A98BD4CFFF1CA77CE5825EECE282A4C9D
+60458E57C15617D16CAE6114A65FD03CD57411C143EC678290410AFB7092B483
+C9A4F08AFDF5AC048ED7C0B5F04A86DFA1760C01E1A7B5629E9DB276BF04283C
+CBE698E90E635DCF162A543EA956500D2B499B17D1581B729DEEA5C5E141C164
+E290CF3A782497CA309959CD6E79E7E0F0989EF12631C7EFB79DDC27878BA445
+828C7EF4F4647683BAA41003E67515C4FD367D6DDFF53D987D82C123CCF4E1D6
+F6C0BD859F271BCCA27373CEAAA0DFB041B5A76C333B24F69CB46EAC0C58B3DE
+F7B9F95B2A6219BFD48AFDC471789AB6563D582B1DC2B55E657ED1F2DC33C718
+ACCB45AD417E725FCCA5E848AA997A5E2ADCD2FE85EF65B51BBA20A80D9CAF2E
+CDE7A216380C44B617C3965E82784856348A9FC8F8078DC34BD883A048C3DE73
+584E75F2F924990802906A334C45D82264E3806C1618F8645D15513E014AECBA
+CB8D02A925393174E3A0744D635A630DD984B7DAE5ED8D7B48A71C8580995E24
+E743E83AC57E445DB3B914A0C7743BD608CAED5F31AFA9ABFAC4EAC3B5F7C266
+13A496E1A546227BFB3A19ACE042D13954446409E09F4631C6EC967CA2B59E69
+185301A999A28106145843A60B963FD7CB0EA0AFF4D2F850B55C88A41B9AC5A5
+4A1D67A0622146A75224331421E38ED23A3FC11351B0FA8B2512D1A93C7B909D
+A1993FFC80B3F114A1468207592BFC34F49A15D77572EB129AB1393F557092ED
+59BD1E645940FCEFB4B3E39771E4983EAA2CFA33573B7FBA761067E54E6CAB15
+678536A2FE638A0A4C508A71001BAED69F3D4C2700C9ADDDB666B1754957A8B9
+E98DF835AED0544CF272ABA25FCAE349E0A24449E36A2719F2301426FB61069D
+3F8D24DBE1A3CF15EFBE64012D5A05FE5E81A7EB841909FB8C94C8CCA1357708
+C5E8BB923F791D721920C067A0A8065691CF400414C9E90D7AA794F2C7E845FC
+08FF4F8133F9C82BCFA699368ECBF6AC497EAB207E6F60419D91E5A0D7141E1C
+AF70DF40D7723923D15F4A33742D1C0439FAE7ABF110CDB6256FFADBF296F4B2
+651182F3FDDABDF8E6CE2EE98FEDECF192A750FCCE8D91A3D7C47B6FC3DDD73B
+925386537D7A9671B9887AF57AEA9A19610AF44C14EDC4CB00505A6D51492117
+BA96923DBB4F1C078764E81780E384FCE44944D68E843C0324A93511E394F3A0
+27DEB767145F4B28B353D6559D1731E07781F21B794C346779D59AC2A269FB10
+706ADBE2DFCF7FCA0D285906DB46B0CE4F54CC0C5C9BD85A1C1E1207AB6E0E2A
+C13B4C5D3B04D50C4686051BFB8C7C583104C5C06C98ED9793D2F90CD74F3B1F
+B4844E92D260D197D6F82C9161B78B509F86D0706DDB488119034CF8CE3F8AAC
+24A0D3145ACA773AFEE463E1ED290ACD704501400832572ADA4BC8CF3B45EE50
+5D6B0BEFE762E3E46681E856F031B50206F0EEC6FC48263FEBAC451E4CD5A577
+D0E85CFCC49645790DD11C5A939D589AE552BA5D1933ECB14BD54CBC6D8F036D
+76949367532CC57FF4DE38AAEC7F324691D5BD96C1A76D976EE267F4B6414CF6
+3F5F299C162BB63B5E64D284A97878ED05B770AE864607C538E0CEDD6541CF01
+5C22B9F702C119CDADE25AD23C31E78F46D215A6D65F37652C4D74C636CBA212
+8D4C6FA5667BE5D25F59F58C4D35319896060116ADD5B27F94205AEF4DDEB648
+C3DB1A06BCA363FA4538137B051D4BBC94B34BD94D9C8E728A99A067933649E9
+F57F1A08498E24783960D546B4F53AFBDD15F401C78A8982DC42DD2FCDAC4E47
+5DADE22DFE7E013275A619AA38B3889F8D81493BBBE04FF6E4815A7B51D6C162
+58B953BECD461972DA9952AA2F44D16465F0743C602CA583F436305FFFDB6F7E
+AA4398524C2D804BA3B3DD14850CAD0FD15E2793E3903D9809802F9FF33947DC
+56D1E63A6DDF36FA836D2A70DA1914954CFEC82E645FF3B17A6C18E9D1DAF11E
+EFD529C47B5FB67EB6925BEFDCB2965CD8D43375915B2141319293CF55912FC7
+9B7D7372DCFC480C344C0755B802DD31E82F7808DC99ADD39A6F37FE8417AFDE
+F6324B415C36FF87DF66543E5E411CB83985EC6972F350236B7DCE0E24B0E59E
+8F365F01803F62EA64DF9BF8A20755E1447BAF2FE8BE7662DEDF67BF37CFD088
+1BE20797FF44B62DC3A4AFA09FD64937C95E7085489099F185F66E3CEF6F6C8D
+A1362FA13C853D172096C0FA44F257F6270D22EFA230C261791EA6062D3BAACE
+F5A1EA0DB44BCDB834D28D02AC851440D145C1885A5B1E5DBF1F8EBD076550BE
+064452220616FDC46A7B92250F07C3D0440B8ACDB87E92DE5C567AF0CAD733EF
+66C90876469C5FBCE277EA1C85E76E00BAC14B824BF743D90AB86288A3D740D9
+6E402AAF6D223C11D7F4D03C47E39FC45F5CAA282EA30C0351D580A8734346EE
+735D909A2F6D23F1E1F55C2163AFDB42E528A1FB6D22FD3ACCC12CB771FE1E7C
+F5C946D682443A26BD0396FD44DC9484C75469B7CD0207EAFCFD6BBDD0A8989A
+A9B8FAFD59F3FC57F1C35ECF26EEA7B09A6505EA01CD8ADF8FE0664BE19D1E05
+56135EC7C89F64B7426E0DDE5CD424A834E576781A6179F63B7ABF41FA9A1EBB
+45C8D93D4C172353952D961C9D3BF0FC42F7EB4D4AC32750B0BC9596A4D9F610
+428239422891286815D66116A02DB58531B25CEDE819F7B5F044A9207C264DC1
+FD02DEB67B622DD3655D2FECD7C106F0104FA05C22D5221DAA6E134D3149608F
+03FC97DF783DEEB8F0757E2116B36BAB0384D18184177D97D947983550285B17
+1DAA6BE705219CB6ED34D02CFEB76D708014181B299F69F8B4CA7D0FCBDB43DE
+8AA73403A531D81A9290AE447184735B7C2FA4F81E59C07FC8454D690EFD9F36
+0D7DB4F0FD87DDA518387F342F9CCBA1B36985D8A2EF780793B79D4521AB828B
+5F0006E8A4F41976945501F3BCD6D8064311E6471E856D89903810B298D82560
+A04B927F04D6B8E062893466A2B98EAD6FAEA3866F0C43ACEA9695FC602F712C
+1A563759D399F56A38DFDF00A69BEBF7B52ECE48E1F40001C6A94825BA48A318
+399A5C879C7C70C913DFC8F0D26070AD1FADA158039ED6140B04D4ADEB2B3605
+B5EA9F670E2DD40180886053399EBF39FBED864034C95E378789FEFA0055BFB2
+148FEC39E0B80C4793BEE6D5109FDE9B405E5C32D8480A854838E22A7723AF08
+786FBE9A4D20207BF7A2B6AC3A8B38FBAC4EFFF1E961C0BF3750B99929A891E6
+7E3F4734230D98212410DDA8665ED6EC2CB22A4210AF6E7E0511214B6B714708
+644ABFC6D303CDEA42375BB856547B0CBDF73FD732B5FE2402C3BE286E391BDD
+70594242F300906C09747A66EAC5AC8D86E3F6D9123E5DEF6520C2104DAFBF29
+3575D497CC5C01DB31D97D5CD3A07C7A5D3C0ED470CF49BD885D7E2B5D336602
+09BB1BF76513175E98977D5AB84A0534FF60C8BA59ACF3E82011603B0ED4B691
+8435CAE6D4D937B84C14E8D58F5D0DFA6193491BA4DA4BE76D8FE65F3538D019
+A615B9624780817B43BC9980C5DACE3B92927622459284E0F337C53694E745CA
+9578F28788330B93D257C911558D443764E07C81B910B7752F53A2FB665DEBF3
+454D88067569006D1D55BC6C31A7E02632FC1AD74FA56CB95B0C7679CE4E917F
+4C364FC8FA6DFF3ABFBAA8193B559760C0ECA8FEB1EF4B1A7B09A412E9825215
+A5ED693F182EF3C51337A272CB2328875C437ECD0D387C93E25E69B82144804A
+AAF142E2C3054F59459D51F0AA663C50D317553B901712880C4B3FFD95F32C14
+424AE2A1CD3913497702E2BE6049CB6334A44CE727DEC48F259F8C5A514FD25F
+62EEDFD4CF170DD2CA4CAAF4B22C9FE090B4D52C96578B30646361D5EB942CB4
+B8A8251F02A22518E94ED659C193DCF48423DBFE0F909D10A84CB8AFF593D3F0
+E6EE31800E36249E0B7992E620CFBDA4B37B3A8C9EED8F13D9FCF96D517E6F79
+95C02E77A9615730264264B9524C7F5F63DC1827D7C6EED9F602D0D94B78BC6A
+1952BC2038E3D48FDCAB72DF8CE7B034AD9557AE9A3FDFE9D904D97DA83CBFD5
+4C90B52624876E17AF64D0E24FFCDD2BCCB66D98DEA7680537C79417A4F18BCD
+DD98CB487B447A317EE2F00E28716282A514B19EFA35CABAE5314ED349A50BDA
+82A0FF68C318D5212DA2FD9D3E7E440F2E592BF08F0DB0C901F9C3F8868CF2CC
+F50832676814B2A6832C1BFE1AF637A3AA129E160FD29898244A2D0145AC8332
+7269BC07364E7367CEBDCDF7DAC0E3745BB58EDBAF00618A7619F31E5A942286
+CBC91C0B565B57F9BB8C8BEB3FF3FD10E4063B85E8874C1DFA13031310FC2826
+3E67D0EC92DDF46F23F0AA4851DC75F92CED85821B3AFDB02D416B7D463947A6
+CA8F9409621B95631862A86002FFAD9FD0098A20961AD38B234DB08E5DF61D51
+6F85988ED8B0ADCCABE7F1ECDFAAB1DD9BD40629B1E65BD089396FDFE0A17C40
+99951F668BD116E812A245936D70E294285F89170447520CB556944F8DCBE076
+C4FC87625AE3D679A0ACE7DBC73FE4A28A22937E48C950802CC71D47DC551A9A
+3B8227D72952C46FF592DAF1746D996CF17996C146CED52610176221E9CF510F
+EAAA612D1265E4E1E4AE2FFE7094A99C139A44E7255D3A6105A21435ADA34ACE
+E82F071DE99F3A6289C0C04362EFE40997E9E15CDAA5DAAA4C16411F26C01C66
+A2A6EDEB969E9440CF7A8980103DB8D94538D149FDAE75FCDEFF3F90424DF294
+0EAFF17284A5DAA1D23F4BD74B0F5B50B78E1D8697C1A3CB203B59F50837E0CA
+D8ED77940E586EC519D0AA059F4A497D49635DB8D96DED66BF8F3CFBF7C12C13
+4693C3CC69C420B19810551ACC78E060C001610E0EACFA822BC9716D3671A62D
+2AF9B525B9043C67081A9C2B8D3B703AE5C407EA1C89610E4EC92A953711D45B
+C7801F58A316500BBE4794193AA9B21AE017416D1CCC2E4C6315EA0E6E1E825B
+972DA5B331175BDE7111FBA4F41C13CB40427A97D8B9A5F1702E9A9EB0BBFC9F
+0E00B4759F346D38E8A47F2F0C63C7D284EC8DB8FFC18AF0120F081126347A60
+2883E5EE4BC0858AE21F48CC271C90B37B191CC377126A41EA064D81C6200B7D
+340924B6F50564EA4D2A92327AFCB1D5B07D6B801125E41732D4F373CDA0B495
+98106652E949972B86BD3882AF0993C5A0B9368C20DC3CE87C00B53267188A7C
+2FE7EC5E443654DF30463A83069D90E7BBF0C787B8EA11C7D7CEB456B28B1ADC
+605A8956DF1B63938C2946B06629FD12BA5AD9D627ABC73DD7C18D919AE05198
+CB7274D81862195556F92EC63E1DE68C09D2C2A6AC9E049FE7A28410201A4D93
+D569C862EAC182B1FFC5715B68E40D666F59B8AED6526D0047AFE6891183925E
+3A2EA27C741B8C4FD031537A461737709443F63EA922D2DBB2C5519A72A78832
+619F190C31767FD4DA0521343C246C874F6B7F53F444A5155984062FD7FF2E4C
+FD12638DDF777F9AEC8EFA25643B2FF85180A73292F288A13EF1593D0245A90D
+A8E50B6870075310F9D0258F9626D577D64894561FAFAA31A7627B38F81BECD9
+B322EA2901D61545B7489D3AEA31BF314D236F7994517EFB8663F38D0DDBFD7A
+A992C19863C9B3F32D21AD970A8869592BB97508F7DE9544C360D87FA95FE33B
+796D41808589C67D6B0374AE0B7F55DDA11CB34F9C287119636A642AD3A40B2A
+7F6961CAA3FACA92D3815B68184595A93A903F73840DA1A3699A420CFFF61F8E
+E38B82E30C1E0F5F3E5518A9E87C2B4C0177AE246AB345A65388104584EF11E3
+88254BB0CCBFFD36A924EEF2D21C4030AD5F3CCEE563998ED48CFFFAA24DBBCD
+8C7F885585B3A8B3FB5B8A03D307D752D5174A5C450C4C64369A371BACA1C7BB
+4A7058108DBE6065DB0C64DFD4584C7362CF17F2442ADA0FA4D89E82E10E27CC
+133162A1DB6F2AF58AE0EF27904C89297E9BCADA2017140A52E267FBD44D5704
+E61C
+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
+/UniqueID 5000793 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 123 /endash 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
+5BBB01D9FD44CD3B745454F6D3C8A57BF24C94BFAF5D43E0DA48F45AD97A7896
+FCB2357BB6411F0E4402132B91DAF1D7E824C66C311D84D4D071C1C67B206357
+F99159D770BEE330B40E7189DCEE471A182A20F08FDA657BA49DDF9906E5C1C1
+7F83438502335D7EB1A40004BF2C6F6DC0880A04CE33F11B0F2A089A8C9C65C9
+8A29CBC0D4F00898CC995878A2C605D380C8C4743A6BBD53514C1EC31E6295E4
+DF6030B7BCEF7F4E74863058075AEF438D48FB61924B8387B9C4757D5D282E56
+B20E563DD2E5973E6020B4D723542A8DBE119789F789B3356D04C044E8372B01
+06A1FD2D55F805F1EECB5825E17E4FF7C7FF68C9587A644F83227F183EB2AB3D
+67A452348AB7466E0EEA994D63924A4A414BF15684DF5CEB33628A39EB14A55D
+C154BD8A58AC659FFB67AECF1237EC151104AA528DDC5EE38ED61E8E7553A4CA
+765A684806C2A961B1CE5B0E1B6396C7B5D8083CBF6186741BCB65A86EE22511
+0E08B02D74601597916B0B38E2D5981F2572A54DBFA7F1606DBC4F12F6086D86
+5C491E00BC74936233FC4C5839F8EFE9681D96AED0ECA7AD4C8365D4F9681328
+2393F596E8C30BBADAD3A3B1786EDA66CE916936B0CE4AF7EF2E18B8A4A680AE
+B6A8313DF782672657145946D3A94D6F3372B76C91C261FE88149B21B04E6D59
+69029E33730861133506B384C0F3586064CAF8A4F3BA2B993C86383304B64101
+80CA499A01B7E23DA6769040CE35F2E70DD047999AC341C653BF63FB03E1E347
+29E81350DC425F57F1B9827978FCF0062C0B1A42F2D1A824432A723D5F245236
+0135D17990254035009B9A2B985E196114C903EF2EC9ED669B0715227F6E8AB9
+370DB155683C57DA25493B1C4A0F8525EF5A5B34BD7CAE726B3E4C7565C63562
+DDADCEFCA70AC7041B22D908D4806D01F5EF2B391C50657C9584909467EBF27D
+A97A428AA3485420FA4A942CB270976512DDD4235619CBB71F2E2D8602EC1954
+084CCDC51C5063A61639101C14DD9633EFBAE088B78E99581547E0B9C2309C5E
+080E7B03C201E2C01BEC5EF66CFC516ED646378D45565BEAA4CBD6FA7CD769E3
+0EFE643F4797B7351BBB468B602135EE9BED6B128BFD1AB91314EEE7D782D336
+3FADC69C43179DC6453D0CBF005388F46D72057C802074011681988A2FCCD91B
+FCEA5E2E0CE1DBCE80DBAB3488154C1D070ED2E80F5F7E831BF4F889A0B91DF9
+AD27329F54E31C56FD255E11D2A8E70BB1112DB8BA87D8CF6715229805FE4A69
+F62757FA9B32FBC7638A2F938F70FCE180655F8FB6B37147185DD54737FD7448
+DF5E805A81E68036319E5FFC31AF6EB86933C297BD3ADCD349EA093EDF38A9DE
+E8A540AEF18C2F42FB6DC7281AC2AF343B53F64B9D6A8252402C16DCFF41E441
+9E9F610DF5BE953C1764B11D91F97A143B4E5E5FD7BACD769929406DD52663EC
+1F6106873E98836D304CE641D8A1F68502CB843E0F2119AC71B3059FF4167053
+A7A67F8E464CD6AE7039F5FE70F05766ABD721B562C0DFD96508E561434F367D
+59137B21F9FA236B27A99B038B2F36C0988307653EAB075CB80C4647A9064806
+4426EDD16A3685FFF1824B5DD60E64567C190909DA40A5590F7BF5F6646E9074
+07F6671708D2E93CB86E2E14E7A13680158B6369888E623215498F8810A77688
+D932305700C0BAF6F531D0AF48CC858945C7AC4D2155BACEA3DF2351DCA1E675
+A9164BD9E45715F46574FC956197B0DD7B3689184396DA726793683C16CE628F
+19377CBDCA9497951EC5A5380DABFF783CA37491E90FE85599447DEA5FB3CB6C
+2EC95CBFFF9AD28992870613722CF009287F2618A35456A0137B99EE21355A7A
+2950955D1483F5FEBD36CECB32C41E234840D6B3E15B2B858BC442594669827B
+752E4F0C4C21E3120615A67A445EA6BB8E192215EFE5B63E669303FD91D72612
+DC32427AEB32AD1F48CFA187C7D08E41191C9CBB1DE70DAB1289079E84AAC599
+CAF4692EC27C297C2F419D579A5B46B0EF83532AC9D6854D8CA02890BA2948B1
+26BB018E2FBEB9E96F3B5095A51F6C343BBB79918B1DC7211F164A664AB4000A
+A5BDBDBB72DE0DC4FD81535A53FDA10FE2B1FE1E1E6FCEBFF0C0A3056EF1B523
+02D4CC128473AA5A5E50F0F78868FF9F610566894C826A704780EE5A911F187D
+67ADE4C8E6D3D55FAFB4324B24A3EB8BDB886274D3232828C389AA1CA85BFBB0
+19ABB6E4763FA5F01920DC93553800FE4DFC010B0772AEE6B8BDF628551C5C37
+33DA17BF224175E7B5EB7D2224D2A273795406E2C486D91E84B7180927EF2409
+5F47E8A93DC21C874A6EE66BA3F235D96256173888550B143B33970E9C38B53F
+54863AC336C0F9000572932790A2BCC74FE0FD4C644F3AB6952A105C93214E17
+077E379F4CE58876AB1F4FB231DBADA8945534FEAE6D3424E5748519B63068AD
+5ABBEFE1681B01E09CAF55F08D65A212A9B20C0D015945CFCC72024A6CF47E23
+31AD8E8E94132C3E8A1D3B4DD95441920A6AB8025660CA3EAA96ACCA77A2EDD1
+671A5CA93B25ABD41AFE1292CAB0FDF6B2B5746DB28B1CEF240677571C65ACE8
+2C520C5810C4AD2931BB0FDFDE22A934D65FA40FF5EBB6FF65471B0454F535D6
+BEFA00C56296933D9A8DEFCF4AEB7642251428D9248F8E6DDE9D0394EEFAAC32
+CDABCD387BEAAF2F1431C7132B6292D75A5247AA856712F6DF927CCB9919D277
+1B5F12528FC2B2BC4CF17E27D3AD3F0C31CE273016C771569E30EBCF34C91CA6
+685B57672520D2551AB832FCA209EDA26837DEA6CE19D25453F9E880367E201E
+2E0B61C6BC792BD5F35533EA7D8B8E587A4D93421B9B977EC0B25C56DCD4198B
+C0A24A2D66A125B1CAF11A739ABF739CC4F5B0B1D39633C58C0772A180D48AA3
+966423EA77ECB511A9B363435E044DD2A1F920D15628C16E67F27B6AD15AEBD8
+4C236E0A0884FCC70269C69A6473EAE2EAE14F7292C10C37016C53755A74724F
+5A8F27DE31339B6992241C5813D73E870916CB795A229F00AD319023DE638D8D
+622FEEEA9AFBD5CF278F6B8EC17A83D82C39DD80F478A3C2B16F44A894C0BD54
+1BB70219941EE63992DA42F545C2BD9074C3F16319EF909F25CA31C33A6AF0CB
+B28F9425FD28EA273C689DFF649D465E6D713D260065282A22ED9168AB729E99
+9B79F9D3F1F10516EAA6D1C9E7FC3A703D627EF5CB434757502BA30B5A0A530B
+F2A5896A398D1D1D75B0FBA35072B0E297F15BD2277F22E68F0400B1DF5CC02C
+50FFCD3ED3BDE541D51CE298AB28C8B8FC251435D35312A362F3E084E4F5F48A
+322ECE5E140163A23F2478F11F374A5CC0128DA17312B61D4423E878C7B758E7
+599FB99531739D6E705CB75057B709458143070C889EE92AE6E4DA10ABFAA35C
+5CB5C75AED40689E3F9564092513004A7206BDEE283DDF4D3282F24796D477A3
+DC25BF69F83B9C7882AF7AF3669372000101DE8D5AED834937AB23D706F34DF1
+148BE8066856717CB43B66F9CFB96F4CAE79EC8D98342F02457D2683072A7CBA
+52E1F535750D2753EB8CED6C9BF87FC1DFB199C117A4183170AD261EA836E106
+3969A6ABB5B524F8050171077AF59E75557387C05E0B3F21A41A058C5A56B36C
+E49735C21DD51FF636FC12F319817A9559EF805C093A1B2F9AD83504A09189B8
+E94397F9AEA7CCE4C5B311FE839BD1EA4859C28D7E47947FA518D0D3B22E9EAB
+CB349C4D10DF89EF9A067ADA5C593F3D22786EB5A28549E1347019E98FB86943
+5E3426FD50725E1ED2D967EB9B7F6B3828362C94A3A0694B79F21C7C34BCC81C
+325911BBB66E6A26625A599B33140439357DAAAC6A7A2EEB77343B270AA9A9BE
+BEE94DC9FE2DF9F695366CD8C2BDE31084301456F2EBE72DF0933E36F34AF6AD
+EEAC650569D4872976B8514556110BDD6135A0B7DD576CCF329BC5B7CE37AE46
+B1147B743966BE2186FE24CC529349017A44E90862FC8BF2F4255A695E2C9307
+FED5786E744FA0B7CB877803DC7CBD8DEC72A166F613649C8E76F3A73CAD6FCA
+4F75F96ABC53DF6EC3B4CACE0B84338BE3C56D4978D17EEB92B5EA4939CB12CB
+892C1A2E3DECE6B9B25FA3FD66E626980FF7753187E46DA69D799778FA497446
+B784B00CAF6948D7EB37E2024B3BBC0B6833A64DADAA97B50C9659BBD3546F70
+0F63116BBD001AC7C07F44E4E726846EBE4B37E1CE03BE1C0117B1F0E4B03BB0
+B7609B4A374B2684D3B39C40E9BAFDC8E3D7678C8966D0C077BA0C6A6EC5A21D
+AEDB2C182C147926FA2F65F84D05B604D639B48C25BF2272FFD1124BFA91C27A
+90297C9AEF84C2485B799315A4FA76D90EBE78404403CBE59E781C60F697B04E
+2C469EEC86D4519FAAB24D2B3D8B3144ED7B8547105D777AFA2062DA587BBECB
+F75D321F91F029D3F45B2183A061F02B3412D8C91CD7C2570D8CBB5A24E5BE17
+AEF8E615C40B30EA24E352130F2861041C8A79C697CEA3266C18F318F8DAF17D
+45D9824F510458FA54DDC318C7A1633C15577E9C091856960ADD80976B94DD3F
+EC898A5D0DA981114FA93AD541FB418498B1E3AE5E6ED5E0418FE7FCDE4DF154
+46D7BE8BB535BB5C2B71BDF99700C40A55F0EB6B8F0225642002331A907B2CF3
+516BAF3BE062CA5232686C4CFB5F210788856F8BFED068EA69145F19BF882D37
+0C95E400CDB55D3B4957C755AA9EBB01E08A38895EEC2594234DEC23A959D465
+B74109BA18FD042D7A2D0400D98D4CA3444837AE59EB1E2231C6E1D849F084B9
+1F6C1A46A405B7CEA877470047BA514C8CC418513C201D83CEDC8F1A0468A274
+51B77E54D98E6CECAC1B26A7396DD35EB184A8ECF10A829927B56B7DCF648109
+CEFA45EECF4BC07BD5F51AC8A0CB5A16AE2A80D7BC242526262B3DF218A3528E
+7705D55CB4A9DE82CDFF16766FEEE66443B4A15300B2B797F9825AE3D1C5409C
+151E3B61ACDFE760503FF47AEB55E074E04D3D56877D3070DFC90CD4743A8A0E
+43AC67DAEDF4E0DD1B6F520F16E746634AB6B0BAC79AAFA97A00378F5E41311E
+9B82067869D06F9B310D127FB31EA627F5A516F26BCAE8DF8641668D5EE29118
+CF4C302E357F1A9B230B7C935AD6BF08421A0B0F1AF8BA13A13507A23A06A4FE
+6693B401E0A03F79EA15C1A0DD6D9E47E490B34903761A665E3D27D3BCDBC055
+74F767008566C10DFA04D58C07C3A4727CD294FA582F974CBF3FB4F48C7C3858
+BBA3FBBF316D6303D134740CA6767DC8EE5F6924D60817775D4E3A194FEE9819
+39AECCA08AEA9EF3E2CEE52E9E8BE708B12BC24F30F61071CF9550B42AE17482
+04954466C7032C6FD316DC597F167D7ADE1A15B36652F5CF48F7A723904BA137
+21E87AB254644BBC78257B5B817B96883C839ADB8CF782368EBAAE33CBFF1B9F
+887735D21C76088D444C046266497597BACF8CF658DFE0D76EC9A467EEDC7E67
+A1EEFE4294D64DE810A39840469BAB628754E811D5342CFF30EB74007387C697
+011834C37343D8FB4CF9920EADB9233B65BD438CD8AD0219848E3EB655A47344
+219FEE05B2CC64F046766D706FF2CF826E9DEE899E0F5DCADF4AC151F1BE3230
+AF61F29FE9D4620E03ED219042718F7AE3A32E5168CA80D71320A84815A4169D
+DAA94D96D824949ABDE7911EBEEAC360283131EE171AB222D07BF7AE70824DC1
+388EE78DBE76C85AF8DC4637A529E3E0E5ED4734DD801DCBADBA166E3B3B8682
+5DB5B82352874C5FC54A0504956CD30FDDF948EDD2E01BE24E109B7C3FD4EE9F
+DB15BDB78083016B40DC5BB27BDE129AAFEB1A7EB6446F0742579F4E479C21D6
+A7DA9DCFA85CDF64D007FB5E89E9A96E7A6049BF3A0B5055AE116822C038D8CB
+0DC620C1C29C916A406C0EEF461DE60857457849055BE186AA3AF6620E0762FD
+352BEE27B6AA7E990887D6198BBCF894A997D01E077A367A953A53DF135159C4
+B80F600FF4259CBAD61E846CBF0706BD302F845C0980B98C901D0A5294C14314
+D48BA92D1620C15E67135EE231C267046C4EA2BAB67849604B9E04BAE8899649
+9640F74149251014FC7733750B0D41C2665FEB972A9CCABA193AFEBF1C76E2EE
+6DEA89475D21B576FAE4DA3815DDA6CA0553967D67B0BA4352CF8B1F85343689
+45F234DC16D26CDDE02B25CEEAA629EB45CED640352A6A4316058625CA07CBF3
+35EE87B6A75512D68AA19E2C3F866E5DD70F3B46C93CD02CDF11356BEB75F128
+A73B2AC5956CAEFFAE39DD7AED29A3E4A136C91C196130ED4718A6AC2D25621F
+4C305837C4C6D2283CDD26FA4BAB54A08AA3AF5AFED066AB6FC6648973CA3B6B
+E0A24400829A930BBAF35AA86037618628871F658C1BC6727207A0155D960BB9
+1EB075AAF03E0D383ECFA2190661CCC886D2426F98ED15DD918759F08527EE4E
+2A045971D213CD656EE1DAFFF5FA83F36C74EA4DD84EEFD462D4A66104F8CE14
+ADCCD214C7887C3CCB2CDCAB51DD6A47CBA8BF9FCA135A8087AF4EF55C39BC64
+F1845AAEF64DE41A8E3BE5625E6DEB3E9E1FFB36CCAC06A880B44CF14F8EA33F
+E9AD015F2210CF9061DD18ABD28FF9DCDE846DEAB882442EF45835E3EFBA38CF
+BD454B933005385CAB10C3E95E4C910848F425C764C4D07048BCF3487911055C
+9DBA1CC3D4DF8E1DDFA6BC7F31EFCFB784249A1A6351B1EB92B30B65C3174BBF
+1B4948CCC3732065BC350AC7DBD5EC7AE53A6905C10AA01CB65D4F1C945D8FD7
+DCD62C8B8EBCA1B2B1A7B66C951D8CC9F99DBDF51CF0816682D2BA691781F413
+CD6ECEA820313981FBA2C55E48F189DF6E01D4D92600E8257EFF5B707CD010AF
+58AA1A7347D91CFBE9D528DCFDB46230D37411246C739B4C7E68EB55F42637FC
+ADB2E3C48DD1D43E8C7B81DE89C38E3D8723D3C538EC8B5FA2F7B4C1E8FE2CD1
+9415FBF083C55FC025761B2B1A7620E1032B1CE218A20A7B170EB155FC5B1CCC
+04D50B9585088AD5F66B41EE56BFC205EEF0EE97DC70B3AA2501F1F7E57661D6
+5B8E6E76D57CF1002C27F2FA4FD44A4822CE051694C78AB1C226A1979E6C21C5
+D3C01109E361CD3346AF44E7B88B836CE757AC6B4D5EA0FA1D2020CDA9D164B3
+B989F7F328CC3BD2D1654060517751CE36C2BF3947C8AE01D66530859B020AC0
+58AABB76EACC24AE4147B0582E57B0778FBB102574E2461D2FAEC2078AD5959A
+BE2AF9D3AC2BFDCE0147BCF8CB8EBC225E293B955EE6BC527FA5977C9F4BC932
+17AD896A817D9A5A79300331C10694E26616BB1B8E8D3D21E4ABFCA3A3A3536C
+12251FAF9B2F9CE7A98AB9E170E8B0745450C0CDA79F457F9CC0EAC1778B5207
+75D5164CBE42C77260299931A158CC17652162D6E780EF60994AAD522EC5B130
+113B800D16BE2996ABAEDBBF3BBE7B68710C6F46D5C82C59661BBDF16A59FF77
+89FD73D2A60700EF4375B73664619A3253A3EBD24B22310B31389024DBB54DEC
+06550BD1C21A39BC15B092ABDF5A8A989A70C4BC17B78A9442E5674D4AF20403
+E5112BB4695674D40DF8EEB60765FF0719D822789EFE437B7AA672C1DF0A91B3
+25528E7C3A0FBC59588BD5414C1ACC8C30C4718BFB894630410FDDB973BC6AA9
+9CFBF6DFAAA122D91B55C833FB383742E0B143ACADEE13915C5CA4E3F53685CC
+D03F843B4E9AA36730EE14D13A93F3DC482FE54D9BE43E1616ADF337D69F41D1
+3FACF46D00B76AECFFBB3C8C041072E9069DD648EB1DBBABC75C109EE4FAB701
+B503FE5C4B36AD0C9A61A1AD4E9DC42637F30A9EB624C0778CA315E8B9C500A9
+E3241499268A4F52E7C31F23779E84902930A63F2A1959BF40FC6B9623EAB3F3
+BFEE55041BA1F4798EC410F0EE660F7D331D11D319A05DF9FF5B14C7BBFFEBF0
+F70C0EDD9449531E7CD67942039D3867F58F09C74BB9D50124E2F4D6A00E18EA
+D9EB3BFDE7D1D6AE167047B334C78394170D5BBF6FB70897DF6F712927C70A1B
+A9A7AFA1C8A98259CDD00A3BBA46107B21BD03240826D3130E70618068EC5CC1
+20862E5BDFA28AE4D5EDF6407682D806F253E067AB680642978BEED06EB4046D
+F5E29D605B0D6B782D1EEF4EE8E231C0576EA7CF0E9504388A73BAF42325A7CA
+185AC6F75A83DC01BA4741E79A440B2345AF5C3BD9734FF89C0FBAC490A084C6
+2FEE9AECC8F700A78E39690960A1B79958654FAB68CC6BF7D502230C100DA448
+6761A150CDEC21AB82A53C3CFCA169B27D22AA921D2B55C8AC6588B057D3A78D
+3977157CBD2765BABD70F88C1B09D6163F5DC144588D74672519BD84CEEB48D2
+080776E83D9534BDCA86C4D893E81D99B1C6798BBAEA9943669BE3B3AB96B65B
+F432BB78C3B0D147AE5EEEA9B8095C0244F08EEFC79B3477961E8D5F06F9E928
+09D113A6C5A645785C71F460387B495F45DEF0B9770DCA38A9F2BBD11E649DDC
+C3C9A847224A71B82DC6E54059AB548CBFAFFE95944AC9ACF538D4DBC83A7F4C
+FE8C459B13AC9A5D0D668F412D0347A7105DF090C4FFE53567143AFE110F989A
+4BA1C3EA67BB91248C4327714329F8E26A4089B27B2534824BDC7988CBE05E85
+B3A6A0FABB88C3F36121DE09570A557EAAECDDF7FAC7C100303B94FC3F848883
+22441D3B0CB33A57829277301B20C1E260FC1E2AF8404AC0C6C4A0CD40EA7C0E
+D983BCDAA796CD581E6151DAC5E09CA39795825E5837E328D576B91C522B2C49
+B21EEFBD7A7049197B30D9E1087AEB9D9AFB428DF2DF54E501A32492EB844B2D
+467E280A497DE08ADA872B39809E69E97C1DCE8EE464F4E050E7F5707B70D79C
+B332C3F766D355BFF746124E2527E6058899124427401702D75A5EE7827FD4F5
+F0CD3DEEBF76CF71ECA13A1EF218BC96A684FC8C5DCA6FA98A6DC27DED3E8E39
+0CF3AB35E9BA35DE6BD667B8F588098822412B0C29558103B7631745D2A549C4
+4878254C5A2BEFDF69184DC7B20918C27208B757BAFB820DCBEFAC93186C1FDD
+106BD0DB162E1D704FFE23AE7509EEBABDF16D8CB1F60016F272932855DE1FDE
+639DBC4CA9EB6431187FF4CACAFF95160ECA3BE0B45CC574E0A64911ED1D4208
+0E9AAF6D84D2EBFA1405C866A3B46A7A6163EB7EECCC3A315BB108BE117A6CE1
+53D8F27D6A605FC2A494D5A15CE0895B44F511485B97059966D68CB989FA9FCF
+ADD3EAA4E19C49A271089CE02C8ACEFC966FB1D4C85BFCA04DE1FEF532A969FA
+4F0725FFA69D7F9A6C2DEA1AC2FD67C257B52728C4D3159D450EA81285A34D26
+ACD07D701721542119F8900BCBF9AED2D485A63A7AD974EE3195B1B5FD627EAF
+247127BBA5A42A79ACD94383FB7238E4BC76E500B1C6FB573A549330299C3CD9
+AB2806D83186432898A410E8B1B55CCB755B4DAEE7821C9D079DDE1A4B3B8B93
+8C649A0CCF7F8852073970F51C980C86CB4A6F44691CE2C4FB0623326C2DC1B0
+8BBE9F87DB03C7FCCE82C7BF0D853B0FA15A4D5816567891357270EF27BAEDDF
+E4520E0B6E2FED781E165BF8AA1917DF03B094297F1606F7BD87FDD765F890CC
+D17D74BCCE110D1048A00C0163E9102E3168133780EDAC57AAC350358D62B7B0
+15A0BC804E93A363C3890066636EB3ED89EC4CBA248B77C677E7BFB3C4097D00
+76DDE7256E044F074FA32A3E958F1C6CF9EEB133F911FDAD048AA1411F5B2DB1
+6515F65E9811FB520DD204D502697B0A1C99AF55AC614172350D1720FB92EF34
+852BDE8B107374A9880649123DA88067EB03B3CC2E54EF6AEE225F44068BDA10
+AFC5CF9D7180B6F352CD7F0C4998F12657A652818DFF80DF7A9F16606E5DC9C9
+F49D63DE72B50F3E8A04A61F194B705B175B388F353FBB1B67234B07540E7807
+A7CD51163D871EB1A2A03F64719561274DC9BC97DE9530F20E6FD7F6D1B3548F
+9C47AC945AB68272C229BC9D592230E8F7302B06C4ED9048CB7B92117034B433
+DAA054011E0D4800B883D34798FA54F97EBE04999E874527624FC7D7C05D7A41
+B4E40DDC29E53EF08840F46F04AB794CC124C1AE4FA5DF060EB0658E61135F63
+2F068A52B2C0D90ADA6C346DAB288E49602706B6A227FFFEAE0A049358341BD1
+F6609064FB8E9D2362E1A1DC5893341815D40BFE08322BBEC6BB3A1814A85F40
+FCFDA53D70F74DEE1B42DD28527E799234E03F30D0F94AA6A05F866CA7C34578
+3FF3DC7D94BCB0662A51FF7DAE7118FA9401A28CAD111C718184398E098BE5DA
+522ABD7DD0FD35BD50F1945CE145DA4DA35AE10CA99EE3893454B338CDCEB1EE
+B11F632C4844E9725670E609FF94E4348E131948E484205C388D8F2C9EEE775E
+7010E8FBD3085A93360C9F750B7032DD35FC2AC32AD9345C7AB4B21D9D0F9371
+B4E5E491A781FCE84AB59A7D737B4E3B2D3801BAD3C26523A4BEA06C0B00BDFF
+0BB439F58B15BC0965D95B8441222080AFF5B280ED9F7C738B10F304E9175241
+685D24F71C40EA5EFB9A9CAAC1E930A49069635F4B0DE9BB7C53BAAC291A2FCB
+F07D6221D09DB5384776FFCE4A0B1A734EFFB56BF8AE9717EFC34AC40AC1F9CB
+683C6D55885684F13A78D5D8BAAB54AAD4E57037359D8BAA79A8AA2EDDC90FC7
+665337DFDA3A946F7539A5D8BE068746AE90E4971960A7EB0AFDD4A28205BE90
+A85000069CC7EA850C9DEF60EB76A218D236437270D851A3040F9EBA1775032E
+9DF6FE6C9525569F54614C23EEB3166E7D2CCF0144C615B848F4574C9B7D6596
+6C868FCDAFB0B28A3BB336E66A20715BD89ABDED96BEBF02382EC901532AEAB0
+52ABEE25F71422C271F54AE1163C461B3C7A56BD77A664C5E0789112DEB8CD0F
+73F264118FB245F62A9487A915E11DA3B78944A1DFB7E6C813609C60913FDC68
+B2216C101D9D80C826E1B5022E8ADD6376D4F38F1F083F4CC237C6D792288CDC
+F6C14A74B9BF9398C7A48B2FC7E41AADAC9BEFA302EE083506DFD2E4B11A5680
+2A0DD5DA575D453DE1D63B12DC286AE8A01580191242529F8A436D3D6EB84809
+14CB9F59FDC908F0F1EE76F3949CD8868E52DEA9BDFFC40814F13A5A338BC3FC
+C198E4241712EAA9CFD42B5024646C2583A86B937120FBE97E91E854E3902AFB
+3A9505A51E6649693DEDDB636CC5DA4E1BD6A57CFB7D99F267D36CFB61C4D6FD
+D978D94B68A4F315A2F087FB104A373D6D27EEF9213379C39EBD48BACCA9F4A1
+D00B97A9D9F34B70D051244AC355C85DC2070CC9E94A6F7D9CDC369876ACD9E8
+E684ACF980377D32DC2CDFF39AFFD10CF3BC5E18CF0D3DFB1E95100CFCCF1A37
+8D9EDD177FBF853E885F1433E4F074D29DF85015C40154B109EA23F7138269B4
+B58A8BBAC2D2289871FBFF7C5BB01A0E4522D6A283638A5E0D6888968A0BEDAD
+F0CBC5F35F1B43F3C9943D4CEB6B345889E6F146DA8D3A3CF3CCBBD9004A81B5
+4A1BDEF0E822DE26A64EFE522AE0679FA4D768A962ADB33DA634B59ADBFB74F4
+6AAAF1D98D4A3BBF555EC957BA9026F446CF4A126943A44CAFDB3D9E76FC611A
+A9878D3486CD6A4B70D1DF8D6C5DE2ADF5BA18C2DB58116A8E65A757720DB5A4
+9F7A5742F01C58D3F7F2F6F6BAB8AD90AE62A542F6CBEE2C91F43507CD447581
+9A56799C692022B228EEDD3F34D0D3B04D5BDEB77EC820DEE0077BACF03E2C7D
+640BB723CF8FAC4D70688882C87EB88A13CDDB6C3B989C57F82D32E1F69F5F72
+528E427A1881AA099FE998B1123A9CDD194AE14A4CCDE113F1986B70AEBADE1E
+DCBD961FB1B66AB3F5FE3F8B450590A12CC57F134D4515293A71B184BC3ACAB0
+674DEBEA0B570476A9B05CC3D23CE9BA498458CE1930BF399CBC45599BB8B3BD
+7A36FB72DF227E5F87A354720C232B70EE1C84C8DE07CCA45C5648A6A3BFF9DF
+571E0145411D570425A949B8BF046BF36962568994B60ECB0CE56B07FC5E35C9
+0BB890084732EAB5D565258C75452065BA30040920E86DAB8F3E6C6956A232D5
+DA3E7132538AAFC9F44241F9B62E6274486BB0AE3EB00B7D6F375CBF6F39F6AE
+712267F639F174D6606F9F25B5067555E885B67794B4F062D40791136C1450FA
+3079FA4FC0D4E28F8F187EC11125D7E6BBC7FAABB5F820EE9C0A046FD542D071
+BC270108768C8813CCED34D2247086C30ABDE8164245A37E562091B48CEC8CCA
+752F44EE4E10F2CD54D9A21D87E6A99DE002F7D12BBF1C1FFB72324DA1886F17
+09AF9978693E64A2CBA64F71454E8DA7EC9E8188CB3F5C12F9E8F8EF7C688400
+B3F5E6E80F3F311C222C55890319EA4B884B9F8879D4413F61B9C934FE0DFA4E
+B7145DE237B45D45631B15401CFE3784CD01A9D4E96075BD7B242A76A2FCB344
+D78C1549024055E3ACF9C6F397C0BA06E328F37424CDCA9A58B85B5C3B84CEDE
+3F6758CE2E4731DB8BF40EADBE5E1FB83EF8BBA3B2FAF778C7F3C68E025EB89C
+8B7C140C734E7045D2608EBFDCA63BBF79F9497CB87BC21644B5D35967D17D5F
+5CBA52ABD56289BF14B5CC62F7261690A1C1691B8795DC5B3679C6B24A844A3A
+DEA14E4B29FFF6251E6F51018A970767BFB32FC413C9F61C1FD5A30BB9EA26BC
+8802CC19DDE10DAB0F4AEFAEC4BB100A3562E132C8C3D0452B2BD2C1D3FA08F3
+CF451840CF4326DD6745356EBC86B1906845AE11D4E7B9A9BBB44802ACAC5902
+00B90E9460B87F214F6A9C50A686E3DFC25D4290E5DC02A71D7A1B76226F0E5D
+8553504665EDD70BE126D59FE8D45469F665B240705C72F196A7E281ED2535DC
+31C5D9E49E286EC06EA0B1370442E473FD24270CFF2450F200A18EA7677B046C
+AD37D923B51E343732A83B9298E51EEE8DAA4B6C513E9C6FA89E58B1C7818598
+33041C04C154C27BA68B3074B6DECE314E1C7FE6746063BAAEA8866E4B6D8648
+D8F957F1871D5E59F4CDABB0F5A0CC126FA77D20F3DC5099006987A9C8301084
+AE4F27EB4E26CB1180D21C8CBC0FD6281D0688C7860CBF5B5417F2F7FE92099E
+8899BA9C3C1DE42E875E3C6EE9ED3F46E064DC377043D1BF23D45149F0A54795
+A9B55BD822C3A23A111C2275F3CA525189A2778107E10BF5779C0EB444572DE6
+D843C9C1D43EF06C04FBB50E23E2083257F8EF53E807C0453067C1050BC38F1F
+5019564C28B41527813FDCB1DEBA155F69481DA9E382F7B1BDB47EE77A7F4903
+9538A8184A114B46349CA080B48FD50B9D83813B5B652B563FF74AB96D945E03
+B4DF74DB6C152B339E9270C5623A70CEE912D706232524683CB15F794C1D1D5C
+CEACB7168FC091B24507DFE77A4B16D18427537D5D4CA824848FC06061F7E1B2
+9268ACCEA6515CBD6207DB44B4AB6DBBFB52E420A8A4E037E561AF9227E8C107
+1C250183DAD9E076D0838F9D7E350B1DA544D549E23E381D4658AB2D0FEE77EC
+A4FD36E7EAF2CF39A627A822C7E4B034607A415415FCCC6A58A0D07F4BC424B8
+45054D3AB0CE9FFFD185E579A4F9EC71FEC01A98DF138D0D9761D8DEA838262C
+B589818D0A116E07B6545A00F56811151707AD731575EFBE62983AA2C294E81D
+80F68B12A8D79C698ADE25D4BDF019D2126940030912C9E293A4E36D4B64AC2C
+063266F813A3FF5F229C12911EA29FAD9F86276EF8A79503598FFCB9789DF864
+4592087C4222ED12055A47EB493ED0330BA130E18847234F5123B2BC7A61982D
+BD0C64B1D6C3B7B7E1A7DB6D5136CA3311F9C0E596166476FF6AB578FDFA169F
+0E5DAE6635F2786C781152324E1E2F9291A3221684AD7BB4558D3CD283171538
+8A4D7A892B8F1BEBE62718F2009CF6EFB02F31493A5A7996754523D21A897E6A
+2DDD90BD46185C2A8ACD4458009D31CA6D9B50B7F5748850301AAFE5F3BBD23C
+EC9F83C2730296929138D975BC4D35F910A75A1ABE138088EF7A769C074F9A9E
+43B30A797976C73F30F3155FF8498DB589BF98A743471B5D15E25C0117905898
+0C432799C51E8CE0CF32138D4D536C801BA03C2C0CA6251E8D350C7F2DE7226E
+F33C5A131E0C71066FFA5FA528013E0C8A9C486564B821E5FEDDE259FE6601C3
+37FDDE0C74390A42D3AB886A9197665581969703566019651ABC227916841C11
+B4675E10AD4DEFAD1C3A3FCC9A74C8F37F23E06CD7AD0A9076A1D65B2325B5E3
+8C164386EEBC4B8FE888AD5860129D0512B4995298A9F6D1843E9BE4B3D6370E
+8199A2523A91FD9AA57DC459BF34012E313F03C3F8B197C4B7BB4F6C1678010E
+D6BC2371CFCBCC73E6FC63F77146511549D12BECA434AB337E6517EBF390D8CA
+6D86C373794E9FBD38B14F7F6B1EA5D09FB224D570D4DBC88D567BB571CDFB91
+7D669069022E70CA2DECACC0C053B692557232B917CD13283F80E45412D5874C
+CBDD4745A56ECD56D06548E2FAF058BFEF9133EF5EB5E856C8A7473D9E8F78D1
+318A2A8006F6D75EDBBE88CF7D9BADF3ACB2E4E11DEF1EC6E53F6ADEAB35E82B
+A885886035444421EDE9D5F6D06BFB961F666960EC333BB767D0E6B21F2D0A66
+FB8EC1ABA6CC91FFDE2CFC67A465AC86A83513A15E77CB824188479099C33115
+AE590E3EFC3545DE7FAE6220CC5E25C3307AF0EDC3DBE3FC4990746532705A78
+A7C6F69B243F3B3D90CC41D21A113827FA10E446851E821A5955B3178D1D8B8D
+B45E53A5CB952EBB4AAFE7A9B1BA609A88BA6DEC0314EF1D2C2812F2D381A1ED
+12FE02B222707FC99C484458B14D051F85739E6FFCA3B747069E70348BB56772
+DBA24F5EC9831218C5080D19AC0B0872106A6405FB93DC47EB062DE198E14A20
+FDABD1F0EBB53E7E92A98E5211136A54420AB0972E5EA2B1648FE0553D4C40D0
+D924C15E50DF2116DCD7E32CD55F49EF4434F0E5310E91A7CD4DE10190E51A2E
+200374418A86FC77FCA0FC1B7F8D89424C2B6096068C32E21DD11B9A7E63E47E
+4C90CDA5304AB06953E30F8A80089AC84F7422F7A28F372BC5CDA53EF7C01EC3
+D13CCB8072E8DB52EE1ABEFA3906C7743F3B94C3A2D6A04581933CBBC0416B93
+94DDC2F598840918BD2C1BF55D0648E6EA63019B0A4903CFD14D28E418283756
+73062F44546E351F707969D0B25E3C834F74628BA64BC08E2DD78BD3570F1F2D
+6D024C6B0EDC52348CFF2304AD3D6925FE99650DF8B5EE720C540C1A37244155
+52ECEA397BFE7497A140CA9735D172EA0FA719739B5B2DF49B7BF06CCE96AD13
+05CF32A4BF31BB7A85D8CA632DD6D7775CCF5060A4AB4E2D084E3CA3A7380396
+B8539910E2CB0F245FF801B249DE757F214828F05D5E12400B24D6EF00EF0DFE
+E9B6B789306B4CCF7DA5AC0BFB5A4FBB7F0A82EEE4E64018CD6DDA06A232BE3E
+60018907CDE60CE9965D9DAF81B12E641C5653026BCF003E2DF1990DD0CB9C24
+0D1352158C2E2E968248D5B73F7828B4B3B321DEFA8CD3F3480663668AE5CDAB
+86F770322371B496DADFD3055E2E6F846D54B5E08F855E0D70D409B11131C48C
+F53B1D72088642CD9384C96EDE80D2B8273A9A8663A6D1D90831BE9539CFFC45
+351EC27A9A581D7BEFC3BD084571DDF97EBB1515B701CF361443C6412DB8498E
+3AE398CE219CC6603770E85E2057CA9EE684A7A52D521B95A390AA4E2E4AE413
+B8E8115E0135362470CC48E194581FA39B5F4289D3658B7D4DE1B19EA7AF784C
+8862DFDE95DFEF792CED26126B0A02515EC5CC257DECB3B273539CBA79F5D082
+9809A2FD48B5A0AF8C0CC5D403992F7308EC11C13A86324E5240D48564E78265
+3E70E1630C2C0E1DEAAF5EE767B83086FE483E0CAD9CB2F027929532C76B072F
+2BD3422D439655291F02A5C3EF1C4E4A58428817F2348E4F8CE69BC2A17E15D5
+917A20D303D06619BA7886A874C9DE356FDA297919A66D5C07331899B02D9F68
+EBA0DA18902F285EC63B9BC375DAF1599BF7BCFFF82EB8540179454F6572D560
+276298242DDC5CD8DA069F0FD70F141A4C76A8316BBC51F5D419A9302A652309
+1E70DF78A27D9C49BA705C077A40155B8A265CC733E35A14632F310A2EADA2EA
+2A82DD8BE695E62ED15810CA11C1A27917D738C255FA4C551ACDBFFF132F5B92
+02535D12C848542636D38A31400EC8DD28775C57650234BEE5745D3E2989D2EB
+A511415AC52F8EE8C7C2D32F384F1BA41235F62DA2F7935930F0F9322CBBE25D
+80203B04CCC1B9BAC7C6E5C777E688DC856809001CB9791F30A3DE02F743D780
+9E663AFEF27FA6E0B1E31C55179F4AA38A135DFBBF0E140D176A782043E4361A
+1995A41EEEC1F3B101AE23700179E9876E9337C9BC2A3121E8434442890C3E1A
+D5AA7066CAB2691CBAA6E68D5F9C9269092A12893BF869597E9FBCDD5BA27169
+ACD8D5B0D7C335A52611AE063E7D941047E5606C1731764F97777529A19A0F51
+F93F8B667A822E2A06ED9EB9DADB303304F477D878ED24E60FE0A751E763C4A7
+50AD8917BABC0A216732AC608826BB89241377260E44C52A59EEC3BAD34B1B10
+C8E98F1E80867E627A0180E4942397999E894D0B88323556BC8C811BB4C963A4
+E6D5D4C6CD1062C5B95DF99556B0B0B9194319D3B53B73FB85324E7C146FA1D8
+CC7C5408D4A9455004A0404A02CE70BCB61A58076D3AEA14210E1DEC384B0F78
+6B9DD74E716CC799D1ECE0240EACB9F5D28322FEA1B3089D4BEB5722AC779779
+EEF3D5D555602EADACFDA33E231F9C893137D05DD64CE595B387E54F5E8F4297
+4157267D59D781BF41942113F8144E3B5DE92B9D235A96CAE2C4497B9ED66249
+DFE8C903DA8E7D43044BEDA3907E0F02D50DB8A6BA7ACE6E24A1827A451ED9FE
+5DB3743D73F39ADB99E544837DE785E34DEAA8CDA890A64BB2617DA7EB9FD497
+F55CDF341E56E5414382917CC92B00D113AB90C31DBCB240D770A819FE439432
+EA61C08CB7A84227C8E5D038F065CD70836A32593E3A00AB3D5932FDF28333A7
+DE4F12E0C55AE34CF8B05CD2E42D1F0270788E6CB659A0EB7D81661F73F20F51
+787DBAB354FBCB62F90A0A808A1EDBC39FAA874CA063524AC38A7828BB1DA558
+08C413E94DC1E80DD0DCA6D84B7F6EEB21E9497F0A3DF80EBF76F2E7327E47D5
+359DE240C04E47758D83A073B0F04D027620509768B0C54725D3368B9497F6F7
+49900EE1602D683DB7A082F89BAAF12BF7484651128DFBD04DE894DFAD58855C
+44E4D124010B1B1C7E3FED607B958938A833BA29230075F6F6284628923972FF
+1CD9C3EDB537F0E0A8A55D11E8C5677A5EC49005B0A94512114EB26DF32601A3
+50718B7C2A2C0B3D0DB41A76ECDF756FF034EDB2E45ADC78BD80046345C256D2
+59F7EC48A02C77C800DA8FCE6BD3E6063D2997F89F01889799AB9AEF70103AC7
+B4F3D1CB4989F789A9D6804D308777F4225D4D2194B64D25E60908D1E5B28303
+E15E58772925C94AF9CB2A0929C6F18574A620DE92B9409BACA274CA8AC2BE63
+0DB75838C608AB1F2432A2F2D535B52C66B09872C42F6C04EEE9161714AE4D86
+C03F4D6AE4AAABAEB6AAA1CE41EEA1A668FF1B7B51EE2142B4F130195B3EB316
+F2DF7FDB43175D255DA9E57E9A08F90FBCCD52B0A9E7E9195B928EA8B0EA4054
+5D2CD675FE6F87076C2CEB18AA5608F4F1801D089FA386D662A6A5AE4C0EF812
+0888AB17ADF4EDD924062D4BE8EC48FB425018351E1C4A0210CD30CD3C8CCDE7
+898520994BBBA0BEE80A65C343448B96E1C3177880AA27E17AA599DEB9FBA3FB
+B3B2DF5730DBA614C87A6FE6DC96A21117F817B6A00D40ED2ABEBC0E492BC96D
+AAF9A44F00CE1809F85186A5D465FA2745EA8D5B2A675304378D40E1A704579C
+2DBF2BE39E1C326644056276F476DF402FFDB7033BC12189800E265AC892A5CB
+9A95F326B379E009D71AC6D080309490EBC47097C040846D6A13E00BF5F7C83A
+3385754A73A521E77119B1464DB3BF0CE529B617CEE56DC53C5823A8B25262B0
+5CCB237F7395CA468B1C8E807F324A27AC557E63C7C04EEB2711F62449A92E00
+A2B4FFD4FFF05608A55503FAC539A691135BC6EE3758754FD65DD9B6A3C7C224
+E71DE0BB871D1D54971B44DC491509E224852224CB3CF6D403437102AD5B687F
+924C53D153CAF8EC04E465A470FF1156468847100331F1DEAFA95EBD0EAE95E2
+37A09A5FA401E4634564407D7867EA02085443B2B09513B6EA8C4702F89F660A
+D32AA8678048D18EAB3FC111F673E3F5454711A229BC0B13B40B47629C4066F7
+83BEA9DA0CA64DCA119EEFBD1B4F611F5E5C32A1C464043966D4048DBC46C2D1
+D5C41B9A035DA74AB387395635CF6F01B04D577B92677DE436361E5131E2C3EB
+BB0794A5988C56A71701327FA4F29A09F8719DA3EBC132C0A8099F8DB82651C3
+807D94DF8C98FA7ADD95C3088C4B63A23FB59FBD0A5FCB8F05E0E3DFFEF11C58
+9EF3B4727B68163A4F8800179BACAB78AF409AFE2ECCC809651953AA43E8AFE6
+DC5E6FF1817AA4BCAF6D6FAD1B2174D8BCD0919B645ECE1D2975F7BB053C486A
+DDA95FE851D8818517A830CC9DC146D267A1AAC2CEEAD5836901F86197B5F959
+9B76790E9752773138FE0CD6134B03387795F4E6B2D0D2E42CC18D21A9CFD58C
+DF54E2DFB2F3CE5521F6C1366541A31F4A67FD599CA9D336D93C7A711C6FB544
+731A10AAB234334DE1D46F2FF22D4F2B7D68D67FD6DCAC48AB518A83E10B590A
+46249F500B86C5262FCA8700E70D66375B22AFA1E5AF82ADE8DE2BDCC6EC90DD
+0E9273D54EE84DFC3FA9D4ECD645C576DBBFDDC49FB340B7D04CA8652A5177C9
+A88A7FFCB4A34911329635DBE5AC2A848E9B88644BC92AC5635E26B8E31F6885
+633CB485D7A6587BEDE17862B759716AF744760BF8B9AF9870B9B766AC715612
+111F49E6AAF2CFE28D9E070DBA2E0C5AAA3309B18A5E02E57805C266CE5D64D1
+BB77502FCD95847387667235A6F491CF3D935BBFBD6111288D681CD12B839734
+49BC2F266B9BE6C2D4BBD6C7CE418B7D048E7BBFE495B601A8D99B69BD456531
+AD205DE2A8E634CAFB939C2E9A96CDEA69192B3935CF237918A7FC4C23138247
+E17DD8D85DBA9094E105CA904B64F25EC42E053506475744EDBFFDCE85603BAD
+30A7E46095C3512F6F5537E15BC15754CCB41F87EBEC8A1022704CAABF32FD14
+C13D7680EEC33C8132E6ADB32A507682E2888058E205A7F44D18C5026802DCBD
+374F9A231725259F8C70D9AEE59E84E30FD3098C173B3162E39656222845FAD4
+B8035281B5615EEBFDE12AD01927E2D51ACCF57A6AD9C237E997A7340BAF7D88
+483838F1209C22EFED01558726851440908CB7707865BF73626AF1CE457C9287
+6C02C5FEADBFCDDEB99CC9F2C35155F451677972E3B9E1112C043D4BB78F13E4
+34B7F9A0C17BED462300E40E4D034FC67BF75E75CA965923292DA1210569DA73
+F188DD1DB3AA7366E789F91D56FC0AAEFA45C63537125FC60E2417B9D6A5CD9D
+A9FEFB40156F16D256CFA67B03FF16CA284072BFF801ADBD7E876432015F4234
+1C4C9B054779CCE96D90EC1DF7C6A79F8DA2B1C4A7111881665D08232C5A8120
+F43229A69F621965AAEF3BE3F474D64E1BC09DF5D021732988A92035D9FE5607
+B706D269E1749A5716192A823D9096FFC98871CCBD0606FA78BD88D260A08022
+F4C3B5EE25113A3F8CD0E506D418CA855DB717344449BBC8321AA3BDDA33E626
+26F574163F89B7E026E122606CFCFABDC9A3261D417571A060118CF7A7D85685
+8605CE526D1975C9631DAA15A439C02B0D2E17EA9762788A6224FBB117A8325A
+5A1D151673A05837F8230982076EE928D62F0FA09D42B43BA62547238ABA1F6A
+DFE0B6D545B97CDFF742D5B36A7BEC733DF2D29C273E37315C3D33D542B1000A
+C4BE231474338BFC92B34900702C37561EACD9214791D149C2BE041BF17F8F76
+CCFAC3F5A40F148E90344C99C5ECF3C8E59F544DB87EBB7CE6AECFA48498C2F8
+29F26377A96344E4F39BED9BD6CEDA7392382B71592D5C28E01775D13FCDFCEE
+2B8D9DA7DA7A5ECF7E0724A27945C66A038B42D21EBC4DFAA16DFBD3F04D2D6A
+A2DA88EB80DEC13D31F5CDE194F90A10768CCDEBE36674FD0E73D4D1877C3843
+3FA9A0A42D38A445548CF00D077714981A0678BB21383762451C5F3F5005AA31
+7E2EA502A9B86CB0A1FF97DE28A7010ABEFB335AEB6F21122314DE3BF15086D2
+A0A89C3CBCAD2E6A03C5CED544FCD6735EEF5E0F3A80BA2153C0775C930E030A
+3FF78EBFFB121F4775D1DEF52776A72352DF13C3D868604DDDDAC78DA0FDBB22
+DA065C0A794269C3D857F742D9
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+%%BeginFont: CMCSC10
+%!PS-AdobeFont-1.0: CMCSC10 003.002
+%%Title: CMCSC10
+%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 CMCSC10.
+% 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/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup
+/UniqueID get 5087402 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 /CMCSC10 def
+/FontBBox {14 -250 1077 750 }readonly def
+/UniqueID 5087402 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 CMCSC10.) readonly def
+/FullName (CMCSC10) readonly def
+/FamilyName (Computer Modern) readonly def
+/Weight (Medium) readonly def
+/ItalicAngle 0 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 97 /a put
+dup 99 /c put
+dup 105 /i put
+dup 115 /s put
+readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5
+45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4
+7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7
+72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E
+BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89
+974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674
+11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2
+048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31
+CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2
+0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3
+D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D
+567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3
+DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF
+435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E
+2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148
+D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1
+DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70
+8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F
+DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C
+9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E
+1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49
+59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402
+A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA
+90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E
+3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB
+3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41
+736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198
+E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94
+17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D
+FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E
+1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085
+35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367
+3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1
+5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245
+658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD
+8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F
+CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9
+D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7
+606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C
+64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8
+F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00
+C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7
+072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3
+7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317
+1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B
+5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3
+2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06
+491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C
+B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07
+8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F
+9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568
+4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781
+AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E
+36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA
+88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85
+5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3
+5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8
+AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152
+7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0
+CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8
+E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF
+53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9
+FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A
+94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4
+E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC
+4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B
+D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428
+F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4
+5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460
+7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2
+361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579
+5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7
+83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F
+8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3
+F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC
+F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327
+EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15
+B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D
+F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4
+8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE
+07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE
+8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4
+12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B
+E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA
+EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B
+EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207
+A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29
+0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F
+AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24
+3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128
+2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037
+215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE
+E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720
+70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5
+37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE
+BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A
+EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F
+AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A
+0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F
+7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8
+9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5
+28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A
+962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E
+F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3
+3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC
+3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5
+15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8
+DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF
+72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512
+D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588
+462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026
+465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607
+6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7
+8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A
+AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20
+53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34
+E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF
+E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605
+8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395
+CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064
+46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C
+AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7
+391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015
+55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643
+0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1
+0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8
+3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A
+22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384
+5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0
+20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3
+B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E
+AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED
+CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B
+7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9
+B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED
+A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201
+213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B
+57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE
+DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082
+9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271
+C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC
+F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F
+54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E
+C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051
+1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90
+7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287
+72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A
+DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC
+5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2
+7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901
+EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4
+62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1
+0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A
+94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6
+5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED
+D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E
+74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88
+159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5
+2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD
+D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143
+40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E
+DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977
+CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F
+C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A
+1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A
+7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5
+D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614
+37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874
+357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68
+6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435
+6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53
+686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F
+D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8
+EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6
+3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D
+E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3
+154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD
+9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092
+40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6
+A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE
+002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54
+810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D
+637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24
+1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1
+859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF
+6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE
+2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858
+89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A
+38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045
+9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F
+774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9
+75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC
+660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9
+2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C
+8BC2F3AB0BF5A6E5619BE16DF43BB09D0E9D5FA4577426BE8A2F847C25E55D7F
+F67F71F3F7BEB60A2DE7183A562D7A8C97E96A43C9E06549B174431F4499FB8B
+949498C1DCBD58F8C028B52BD41EC7950B2F3F570CC86B44382CB9F2D5EA8CC6
+BD9601797B108FEC00511C0D50484F503C1CA95A766012B9BAD38F014867A27E
+D4564B02850D3892796717EDA0E3AF8F81B1B4404DA8FF7D0FF25B1464E75B6B
+2A55554A12D0C032029C19B72CE17052E96D235A0825065ABB286814A465351B
+6AA15EBFC67E9FBCA14D7B8F1B9AD6DEA70CDAE988751E1703C41504A15F25A4
+AD04721DFDDF69C267DAABAAFD31ADF59861FC3A7D9B3EC7E65E424DDF65E253
+7E22E3190B20B2221849EC1FF3DB635393446B435A51DFDF427C2EE6C45CC9EB
+CF142528D4F8869E6E44FFD471CFBEFD327B5D204C879BC8F9611D5B67383211
+5224ED2DDE9A993549039A6FE27BA358AA91C292216E9AD0FBFB5C3A34F5ABCE
+DED5848E2F0E438737A9C1DB313A943BDEAEA9B30B1B224D81FA6C74E5BCC03F
+032C3951F93F7291E5DD988B44DCB8E8900746AF88AB0D464DAF82129D29AA30
+C8E6102ADA9C9D5F0086E13F8C33F09B9332242B98F6C635B4940592135C75FD
+AF697976371F61D88DE453D7BC926C68F4DC15189B85BA08700A5CC26A1590C5
+EDFCAF063D28095048939FB2A21B6EF7D08E6189907A5D0D5CC24CC577104438
+79D693CE13C22BC55612038F56A07C3BFAE2513905B0AB3F5CDC4808BF581D14
+E1F3B0E771C0E7DF3CDC1A80002989F77EEF09DA90EC20CF2B1153598E7EF452
+4FE4BD2CE3EB3E8E41041C42
+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
+/UniqueID 5000761 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 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 79 /O put
+dup 81 /Q 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 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
+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
+1419EBD5CA76742B84B005FD3D7F5D0A278A2A31A7CD7C0D648206F8C3E6B3B1
+EA6245C4C49276675068DFEDE6CCC05F61819E9DAC54AD9555949328E013EEA9
+3F7CC83880EDEA0420BDED07210E62203BD81BBD4624FA99BC57C8DB549F12DF
+0AEF30294C7CB1A7E0122304ED23C2F9918659D8E03A2E8625B83749A64ADA0A
+CD94C2C177067C22AD0BBFE029C3D8D981D6F47D6BB629F545CEBEE605016AF2
+37FA7363BB9CD034ECB2E63F10035DA4AA93E6C75B8B9D06D98DB3AB28D2428C
+E089BE3BB519DD115EB80B0816A924AF8716FA0A1ED8BDF4B06985EF18A2B116
+4D63F7ECE2750C4EC566BA51A3DF2F27B0EEA97955F5DF2AD3B2F76E0DC16F33
+96350FD8EF7B2C2BA6F5119E7EEEF66DD3B10E704E4C42FD54B3AD2DCA30227B
+DC1D557FC444F8F0D7D8477E74B2586D1C7E636FCF2452E32C324EC41D30E1A5
+C8B972FCC21B14509B7D3B960EE375570E58BB1A06AFD753891FEEE9B565807E
+9FEF35B13BDB6DF22D8CB2B488DD849E328A5698DF14EB7DC9EF3639D39E8EF6
+C3E19246E927175F8309960B4F35758A91DDE843BD43CA9CAB415862DF74754D
+6669F527FC356B3345E72FC40977D56FEB7A2DE5ACAB5D1FEDFCFFDB2C19DD09
+7A7F54161AD554EC32B5DA3EAEFA2734F081B10FBFA2AC876F8F42AAF0671CCF
+8BEF92621606061FD09FD7D460508631E38E261A5E56A93B1DE35C9429D78A97
+20F44F491A02214D8F7083CE0297D93E584697BFB161A46FC3BB5914D3CB95B3
+9110575A35BEBE1B18F1C7DBE3B3562E1986CBAFC129A5CD1699F599D6341403
+9C224DB145C633D19076BAA9A2256BB2C4101740833D365775771D897F84A3E3
+6A21D7EB3F79931923091C6DE6C14B854B8D2BDF841521962736A93039AF47F5
+F35B6D059B07A07CB999109E8906E8B698B46686B94A10D0F5BEA884EEBC7B39
+B0DE5AAEA1F0D8FD4C4A68E75CF6849F5E931239F7EF58D66FABEDAD57E80CDF
+B6C5E9653C480B5013D2073BDF1345167DC2BBF775678C9820F24204E16483BC
+61450599E13D1D8D1493BFDFCD1BC0281FE40CC275F165D80DD5300A1DCDCEC5
+56F9597B36A8EE36771FDF64067A281954D4C1A6B4CFDA0B0A106C88AAA67196
+869EA9F84A24212CD0E59F3A963ADBE0A19A0F9372C276DE0E87A45C276A24E2
+C9B04F63C80105D2D25809C5E6FF81073DF45E4AD7DB8F9C9479BF6440234269
+373CC895CFD12B9D64684E50A32258A71A995A41DB23336C4BE4D0F80821CA04
+6B8512FFB7147B33A947E1A0EB7C13656824C6A5552621D4EE2BD5CFF9D084B4
+D6B3896E6A0CD4837F148D7895A309B7DE9249E42F09F1202243B0F04A0FF12A
+5F24E883501428EA4A619884DE4ED3E0E1C1E4C0538D34D553219D36BF81E299
+2083E273940A1859060785C7720000AED76C3634B259ED2A3111791BA08A9486
+E4F573A87A192D431D1B6C49F2B9914599F9CBBB2B7C4240FF33DBBCA85BA248
+E8F20FF5E5CE46E4A5BD3BA2D08D84B246F58BE2531DE3108BDEBE50D39E1B41
+1D27A3B3D1A33BCBE94F331819C3690E6581CDA861E143B91E87EBA33DF4C3C6
+E34F13178013A22975890CC797AE0A5568FBF32BA471400CF8D72152F48CF1EE
+C9021CCC653F105562ED546D9DC92BB92975D17746B76C0E9FA7697B144F887E
+E7415F276FB75655809568A5EF2653FE0FCCA073FB682CF6C0F87EC0CFBD1673
+463B60C09AB27E03F7D9188EE064BDFD5A6328DBCCC9EACDED93C6FB950DF5FD
+1CFDF3EEB3210236747CF2D72D9C125E4E36AD91789B91B5CDAC5884053AD655
+DB302661DBB095AB45819DE69FB84A87DA0C59702D9CD2BB77A901AC7E3484E2
+3A89D03CC126D654DE5F81AF90310585FC708C738A289E224C9C9276E447011F
+63A635137AC78C8D7180025C1AF7A4F599E7A0FE0CC49EE04018172049CB27B0
+2A94753F530E1C401D90FD4116B7C4C59C2A0BECF8F1C660EB4B563CFBCCD440
+BB74580493629FF83CBFB944A05EFA6267D72499CF7ABFC5C6D2B891078E02D9
+0F36C27C5BCAB2F6112E0A72E3E79BC10F710630C707F0393919D2FF94C45CE7
+C8016804F004847EE5F76778AB48E8D6FEBE5A76FEF8EE8F6A003694CB9663AD
+E87AB7B0294D8F1A32B248515399FF86EBEC9C73CCA58FC99E7B93748B7BA7F9
+3511CD1A9E7E154814E52C948AD0B2485E854D5A7C2E9AC6CB9602E9FE673B7F
+9D55631980F2A3BD668395E65E08FD7E97C56CE69A4F3CCAE97E931B2B23457B
+FE0A52B48A765248D9DC536F7B9DC91CBAA54DA8E94523B0926C89DD6A083EDE
+CE990FB630250A8BD520B7399362DECFB22C82DF4EFCA5CB44C0987CD8FF0EBC
+6A16F3AFC46D7F8F192FFF6B6A10D7D5EFF8F06A4B6A1037E64589534058E7F7
+751E836E813B105CF2D3A4DD772F3886BA3E75B39784CF01F283F1D94FAB97F6
+A99DB5AF0531D4804BFC378384FAF03E5769E3428B10F7C9C2C452D472CFC2CD
+6D0E23C5415A7899DD27AE2649E1B8049F213CD3E5F1E9C0F65AC7BE3CBD79AE
+5F2D08FD16D7A9422D5C762150BFCEEA3764C5E7DFB8F0CB7C0A994EFB7B004E
+59B9C81FC990FF845C78BCE7E60FC6661B56FE718A3722C7EF432E4A651834F9
+7776CE649F16360DDC883C35341275E5911E8833DA653A7716EC50AB234F2CAE
+98E12D8E4C82BE40EE976C510E059698569884AFF392C4C174D129BF9F37BE02
+B33E2B5B4359FA7C2959A32C7809818997F35446352318D88944C620045D0DCC
+CFCF54BFC0D4C463F3BFB46DE5D8C9D7A55E2C6B57CB9774614E1F22968E7657
+F3E3BB21929575FBDB2B20507F1BCE58F8D82AB5ACF32CBDB3DA423133DAEC3F
+66042EE5C9B607805050FD00E2A21A08507BADA0EB46E1108E75D00578019EA7
+DE59E5E1E4E56B3A73A40FFB66CDD914E35E9AFF6D95812F57C944BDD8A12247
+2E3A8DF8ECCC53D0D2D93D73DC0D333163FC89DEABDEAA75E679FD813A24F620
+37267A6D7458FF5DB079DA90583E54C27EBD18E105A3A24490BC98C8B3BEF2D3
+7E95417052602197069754F3E26A318A52336876B5BF5CA8EC5E7483B4635DAB
+EC7BCBF93F797A07D83D84E6206EF0C4AEBCE55C31CAD2D60599E902ED25989C
+977B64EAAD9929B78ADC32302E031A9ABB76791BF72A80426742B0A73466545F
+0425D954A18720807C9DEE49B85677055F74206E7EB32B74292402A4AD602227
+C98C12A6363231F3750D5C815D7F273174D003835DCC898D02D2B30A3C9C94A1
+78EB37A10E02816BDE03E4BE8F9E0C4BD53AD949D056CE9572FEC52C516A7718
+4DE6E42D02DC7EEB8E17D048ACF478531A22274B4185F87C4C5669D99AE4F52A
+D52EE0079232096EBDEF3A05238E5E1F1F246A18ED0A6B517F5270FC0EE5782E
+F27F93ACD726E6A795FA0CA4B79A3DE65DBF17016AAA2B3713A7D96ADC20C199
+13017E4A14C92A5C56F094EC7F74892831CCB14759843E46DE0C87E6854D0E7C
+5AEE571187047FA517C7F6FFC429DFCA7BAAA0E2075FA9EAF2ED872BEB9B949D
+C034B33DDF2DCAFA201ACC2943D6A946043BAB1B831A6A6A262CE93B27C26603
+2845EEBEFF85F7C8EB803F751514A78DF3CB9536462F534CA78C857E854D7ACA
+139B397CC851F1B4EB69CC798396164B952A5BE05CCF094737A4673C30B5F057
+695842BBA7DA5741AFDEB1251A652DCDA02FC236C99F5FB33D9A977735C6292F
+11C7AFEA9662017C09DBB36A7DF11F5AA1D5DCA7F8FE3DA3BCDF38E6984AAD43
+C1F1AB8BC2606037BB572B9C195AB63CBC9B4DCD27A63D45C85DC6EDAF0A6EB1
+8753F2884929736BE19B8E4EC5F762F9A0817924FA5881A15308FC9D7656154F
+3A5B0C9A0717D6568624025D7C310A2F84EB1CBA174C2CDD2645F8288093737B
+492461FA850122DF309FF0AFF618F39E5B8A8CD3CF3D4229E17DD417DFD1D0CD
+6A2F4B357D62BDCD090A1E7312086C954071B30A58E01D321384F5390A55DBC0
+DB1E785685B8A572D5CF659CB8BCC3041DDCBDF756DCEC89D8B8E01D5DE5B466
+AC1DBBE837DC46E3338CD13909A7BE7D365C823D69E80AE03B7AC48739914DC2
+0D2F1686B4E2AA539D53067138890E87E90BF1E70C42626B4EC2C18552A9C835
+7D05F9FF2AD308F0CEF71481A3CD4182BE36B4A69116A1A236BE141EF12FF8AC
+4DA9A7ABCE34AF38812AA130A1DDF880A2B11EE51E6FBE3C144CA7EACA4C2AAF
+8FE4A9C6F606BC9698CA2EB56A4D7DABAF04A41A3BC1492F6D08182D775B10B4
+02EC2D88F4C15E5044119D5E5C6D9E780B9C517D2BB0F7E393A82312630D1208
+B4096A313C46219A69FFD23697BBDC3B4D14EFCCF3A0F328EAAAA4B90D818C01
+330A765455C0E7380B19E5D318303D764CB039CC5BD040A66BC8A21021712C19
+E5483AA2C88683D735542846882A57E4F29764E38EA72EFB0B57A3D2FEA9DD60
+C2843E6D7BB58B3D937E3392DD763CA243E0F9F2FF5DD7391C4AC7A87A9CB55B
+A4C87D0FA0846C57E14943835CAC3F90875317AE0C4CC0DAC4D585A0C8A1E625
+A5F6524482AC6EAC917009EAAE7FDABA4CC2A2CF405288733A18848BC68BE754
+5ACEFBB207C913219A8795F0B0E7B2F06449EF19DE22BAF340B62D5A66FC4127
+BF8C8E87FF8F128B6F92F7935293330D3012CF5B6115227BCE32D37D11A3DB9A
+1A84219CDC7D10AA626AE4741F325D130D0AAC96790C25EA55201E15B8464F43
+A8458298A9B72ABB11AE7A15FBC9BB7E45F3978061DFB0CFE2BDD50A652BA033
+BC761CCA2618D9F2335345BADB9B179D38B4AF3C614A735839DF998AB349D674
+804808C980CFC10BDA390669901E59F751093BE931A6F591CB2574B8ED4D3996
+9D0BD9E08D34B1E7B1870C0280EC22DF16E0BD9AF3C74C8B551BE102AC599982
+90EBCF694E4324BBDC78F4F50B87AD7267AE099EE55E7D0AAB179A8B00ACEA65
+D38F00E8F25121F301A20F68F028FAAFAC68209AC94F274F8E02D8522E540901
+1A67E0D5E8028D8773647C2F914D24DBE1F03AAFA337E4C66FD85C3893D3E8DF
+59DD383B4E64D5751CC83350DEE919B77206D04E6371E18533E442DF91A63BE3
+1AC8ED32251EE329696A2CDE2D4D77284D63E99CA2DFFB501C223F493D9F123D
+3119D010A00D7117409E327DF257A2742976869F1F76F91CE7597105C2D9512C
+7A781CFFC5AC5006CE91B58567CFD5CE24BB4785FF5EB04310B2B7F4C018E687
+5D6BF8CBF9513909A8920AF838BE8245D3934559855DA2E27AFFE3F4D9FB2AB0
+2ED8DC4930FAB63C4FADDA465EBE7F5ADD456D12E4BFE2CE880ED1FE7144D03F
+12FDF42400B9FC03E7B1CD33A541BFBCDD27B3E8718BDE9362D25FBAAA121395
+DCE9F8DEDD170CEEBACCB5BEBC960864A116673E35979A8BE6AE58614FF07DF3
+A14AF5D1D52389695ACC637516F404F15B5AC9CB8751E68291E3FE6343FE0F31
+5877A0C0E061884FCE663F54ECFDF5C628A2C954C840DB31E9BA1E32CCB72EB3
+2538707CEA789CED48B26A83437D123080624844E3137AFB8E21ED5C9996D4EA
+200887D38526DA4D09EA944A790D041161D8CAE679F03BE7386B781179BA3F8E
+B67E5F9A96A7B9260717DB2B0B7326A5D99A1CDB4A241F551EAD890659B8D878
+EFB41D269566D7F8366DC00B4FA4B8676D01F3AFF0DBEE1C1ABFE068704319E7
+7C87BFE6FE507991FB3A95068F39EAB20E349BAE6F871BA08E6AA1E9B524DE80
+C29B0E925A90463C9C5D5DE81A61E0D5F3AA14781565342A41D75E1867514739
+A42844F74854C9E6CCDD9A1775E6720A74FC2E9AA4C7B399BCF72266933E73D7
+1AAB86AE638010247385291532A3422B1829DBCB9EA834EEF8FE27368B60AFE2
+392924F43EFE2FC361E1EA45951F328A2CDABDF3EECCEFC961583BB9C4237441
+3F729EE2D7637668D75B5882F10D010CE08EBE748BF62A26CAFB325098E0DD02
+B50B944324ECE3E3236824C37B7930BA5EAB0D0D3E71E246AF3F5FBB9AAC92D4
+DD893214ADD6EE30451B08951121780E396EBC3BF4542ACDCAE9D67932697DFB
+C4AD45E385741099551646681CB20EB9C838582782BD12DFC0683F801105A776
+51F1182E629E948916A6A3633235363A031F9E1ADEDA2A1E332AD3720A153465
+A4E5B1A94DE84602D3248B8835157A9FC62EFD620F975ABE9490AFBEDEEC0435
+359801DFFE9C9CEEB4DE6AEF8E7109536F32D4B737157509E20E66374325DC73
+84181EC7BE73A16F50EAFF4E259FEC912B640E5CD887C837EE253220A2795D5D
+C30C5D1CB2D8FC1819CBF2472E5669A5D67479A2B927E2BCB89C904CA5F00E40
+DA45DC5C7732193B29D9AF0E92DFB17E4CC6174BF6317534FA8A8DDB47957C50
+73DC139632D8F77375D01F49C228E7FEC9F44887EB4206181A174D1F348A4BDF
+7F170D52758C2D05F32B50CA4A5BCA72CFB329EC7E25196433CA52E873C014DC
+660DFE940736C5F033D0B2F834AF9984703CDA2DC07E49F2E31995DDB0BB2EDA
+65F968E6978B154755D69B878D6AA21EF6CBD7432065B03BD8A2E971FF449301
+CEA670AF82B39D6166DD554961F9D006B052EA17A3ABBD93503850BAFED3AD0C
+88B802900DA34256B89D3D81546DC332D47AD4E7258940B4251CE3B8B59FCE98
+8EA562AB582AE9899CE9D8285D77A26070075FF5B1F71093DD7090A3A464B6AF
+2D9C14C077133533B8F4951F4ABE14C7EE12D7156EF6358B965C42793FFCF8AC
+8947DDBE048C41BD8E3C0C5437FD955916A74B2989E6F46B213BDE4961764646
+028C31911166AA086E4245DB1A3DFEF12D82A3D2892E28D5DA0B3BDD3780772F
+0F53E5FEDB788C3E5172970143C9664B7C3DC7DCB87BDC0BFC9819A072B19A7E
+42B8FC3F6882CEAFE7CC8E555BEE042F660A8C72E0AE88A75C8A2A2211784C52
+7EFA1A0E64432F700916D8649748D5190EACAEC8ABFCB980D5E0B61848D21C87
+6D43929E9BDF0C6B24BBCA7B089470289FC67A0F48330FA1A918E2451F18C9B5
+C50115E36C95CC49534F960AF08F2194F5E217C6240ECA5FD59B4E9EDB537B8C
+3CBAA6C1367C75010D35EE91F6DEEAA5ED28D1B56A8D26A1C7C1C67F22E07EAA
+C2508E877DA6DB091DB1E9F77B0F4A5ADAC42E790D31C2E529CC6269E0552096
+5B848150F357D9AFD000236D70840418EEBB53766074A64C71BE3C9984CA0EF6
+CA5EA8FF796C9C7BBF4B03D0DA5E4B618AFD73B60B3A0B3EE1475456972D30F3
+C18F9035486AC4EFC0880B0241B0382866E25D9760E524120936BCC13A2631E6
+5F10D279576354B6EC86A932C2D25B1A01D1487F4031379D1B88B2ED9407C178
+498814FDA9EE56BDB30A82A887D99DDDD59ADB39757351CA63211A3EE41826CE
+44F29289CC3681D561341EA74D400BF7E4496DD426CCD95CEAE3EAF8911A8236
+2BB5842DBAF0F4091C8C8ACDAA4BD525BAE9928022DA635B90324A72FB1B4098
+228F1E70261AA9ED0FAC65A57FB00B7E40A8EDF0AE178380E6EC1B1C24652D23
+CBA683E85BA27F0251FFFC5BBC8EA7A24AB76A795C999BD32B8750A9A79A951C
+EF055114755F0D5B31610A3512D3F689E522D4EC390A3C76FEF0B628298EA121
+464CB2A16A038CEA2E46D41AEE045949A3EE35E0FEE416698F89F5820E719B42
+91BF512A9445649002915772C69D5D768720726A8037C19EABCF68457BB98304
+2422D405F7D7A6F149239BE18E948644996C6F340D9041988521F843A9184404
+DD45FAD30EFFDFFFB0B326D10737F044675C2E177A82D343E7B22C8758176CF3
+3CFC153F414FA470CFE235A7BC283A71D193845523089421A9D08133677A588E
+FC935E1069DAF9E8D1EBFB64D14017E6DD95CD6551C2E569A1AF7B997F72C064
+EF74B819CA4810DB44DD881D9BE7E0C26246B64452AA873CEDE7A5424AA00D14
+AB607ACB49892AB11F89DA6C23A0C88B903F97DF0074F4C99C8034575C6527C8
+05A982716CE1E81F6E942D05562E173084AE6C707902EDCAE73806E91C1A4E0F
+4B6B6448CC32AD38199005F33A56E197ABB67D8EDADBAF578076C29D2ABD5303
+5B437EF06D70D7F5F5CF0E945B5C3A931FD7B7D19AEAC71F34670590521F28B2
+FD6684B0817B15E4EB6DF12765AC8A04332E0CFC0255078B4D58A520A1B77304
+C21C369AA3318E7F8741E5D4302C37F4F10E04C12D9627479F6FCD4A1E7A41C9
+2C6A636D342761D5CC01279099B5DD41C5C10CB06A1A23C5367565986DE3241E
+745A26CA9F6F25D67E92BB761AD00CDD602D731188079CC5D1810F5145FA2AB5
+71105768A79C88FD7003D7AC22584C5456A523661C3B86FD5957A83C1E3AA81E
+1EABCD6196E6FDF82F6D02D4ADB045D06B8D3A11F84D7A57328FB37D29696E89
+15CC96FEED11E622A7E02679160AA8755E765D02510E07B3AD075E8BD6F6DF69
+BDE0AEC3C8484C8D27FD625307F87E31754A26930FD6ADA0C80758A04802437F
+29AA775B149195DC0E0E2140DAC130A64C4B30E3835AC46669B2AAA3786DFAAF
+0A44265A454951780B6FA2425156B77F010EB65838FCECEEE6A39B02C6E6651D
+D711A6773821E719A3CD66392E6DD05E7CA8821B35B37A6B2EA995EB01C0902B
+167500C25312B290C9BAF03DA2432C514897330887AB727EBAEBAD34A8E0A2D2
+2ED05439E6FA267C79B196B6B35173FCFF76B02D443DF7BACC3F59840C6EBCAD
+92D66FC878E7305DBE61FA8904DFDDC3DFB295CCFEC7224B7AAE95B8686716CB
+F2F74EC3D9F2DFC551CF475C09592521D7E429EBD16FC058162DFA9F04F3B175
+DA5B27F7DAECA2BCFF0916B011106920F90D2187AACB2B1E4EF9E10FFAF499FD
+E7DD2D74A0B7853E3AC63259F279BEB7B0AF2CCB16D05D8860309777B5C54005
+A3381AA0787ECC6A2D354BD98859CDDAB46579BEA00929397F74B7E00A36CC7A
+E842B62F4741430BBE9655A3E2A29637472767A79259C0A560918B6B7D2D5A80
+B10BCE26C01655536326FCED92A5680C4EEB175BD9740BE886BBEBA006E8AF83
+CBF21DA482D61F4C33325AB9D961EB278474FD9AEDBDA6590D26C24E451C6F03
+02FE5A11A806C1A38200A59B8D62000B73B0A63B0039BE04F56513E650E57769
+A81BD56B69327CAAB71C0EE533F6A8E50E244FB9952FD49C4E84177976B87111
+F411433FEE06127AEC6D6354EB4D91C119CAEE6D640D5BBB2F686769DC897C67
+4EFDF517797023CD36207B3A2C5F326A02575A7632A4927204AB0D7995948CB7
+CCE21BAA6FEC5E87C5CA81338DF533642361836E1094C5CED305FD99FBC8E472
+73FA068569556B524F35E7C6BBEAB1F292702C57B0152D7D6EC8D20318E8B6B5
+2272499889C2A63C508C72F0940C6352DD273C075C7D807F1B6F61253A27718E
+8BCAE3A72AC63465885516DA6A759A08D6C227C3B24F57BB98BCDEC1920C2D99
+76D48420B5A24051645A28A4028B9C9437CB1E448C4AF42C5820F5222E46697F
+501375C61E821AB38948DFAA37B8A2D73CCE341D381162A7D08A5BBC79638FAD
+95F8D317A73E6791120E8DD22D45828C0A9EC88C37BAE5D316A929BB49395FAD
+3259FA903E409A5846C8EAC33A8BC74B63E8956263AA128A17FA12CD3B52ECAF
+3079C9DBC70F292CAF85C36841D0C503CD918F85EE4C65298077A66E2875A0CE
+851B96881C95C05D8654440F08EC835569D4903BBC18F866F4A8D68B90D5DAD8
+0C0595E33D3F9C289C5C04AB75116B4A602E49F451AD7786A17578B697374C12
+C877BDDEE3F974B97C689A14D763C0E739F8D2E60BBD510022DB603CD699B00C
+B5010528C1BCCC9A0F56816409A3DC072F5251043CAA32365B8717C50BE41786
+4782BEF5E79F6066EAE5164D26BCA42C6E62F7B284C74DDCF88C6B1A00004A37
+7F821961F766EDA149B4FECF811857894B6B610E75B4C17758FB3D3DB3E4F3C8
+E62FB00A067E9271E0C4D62CD9566D4E459F5576457738D905E963162604DBE8
+AD8009EE6464719934B4342C2A4F32FDA038A21CEF6E5B03AA17DAA9DA05FB84
+E5366291860B929CAB1A08D09150B42076B1A95A7322CAE777E88A47F49C66E1
+78115A455C1063E914E35B3581422FBF5BDB2FBC13A0DD9E4A9AF1243E4C5934
+8B40DB9E8D61B7C27DF9730D7C473FFA2ACD4157D28A43BBC5424F3AC088B74A
+130A4759C55F5274A47713C4C729B8A8E71CDA1429CACD23891F456FFD5F11D3
+528DD9F88612E194E9A3D28CCF7D8F7AC3DF7BA16FBF75D3FC8A1E7B94EC401A
+6CDC
+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
+/UniqueID 5000798 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 42 /asterisk put
+dup 44 /comma put
+dup 49 /one put
+dup 65 /A put
+dup 67 /C 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 80 /P put
+dup 82 /R put
+dup 83 /S put
+dup 84 /T put
+dup 86 /V put
+dup 89 /Y 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 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
+AB7916D44EC2210CB941B4C12515E844F0D26CDF0AEAD63BF1491BB50ED4D6D2
+739930E80E26E9B425C25033121899AD22102AE6868648BABB7D5985611C95E3
+5B8D365C7D034BA22E904A0ADB0132CE38288C127BBEA0825E600D18383A6854
+EE28FD1B2F57AF704854AEECF985EEFAE0521DB38B0A7511C803CE8AE0D0BC02
+50744F806B8D771AEA2192F982A97827529F28E18AA576E48E1FFB64C010290C
+634D765C964E1E09FA6F1571346ABD5D7C3DECC025341C41C3E06CDCBDD55527
+CED702FA11B262ECE3781DE442CB8B5ACB2808F50A338ED8B7A06E87B52B6ED8
+71918417D9A513196D68732A8F19CA474BAA7DB773172D9D856B64BD83F533AB
+5B0707A530F940923F9271CE1207CBBF03119E853F21561C5C1B0704B60E445B
+3D8F6EC15EA15128C037F8050D2912589AA51BA1E078B33042F7FB63C8F17D91
+B84A3A6A98DD23F00E388073314C8FB56967EF8FD22B90B771FB76BB5BF752BE
+30E2F7448E732B237B9DEBB9C5DB425D9C2FF5D752F33F3363FD5B577C94769B
+1A69858A3405CF979F5B3A267C8F71929198827B00D92052855E97A2670F08F7
+D7D44450232874F099C35B199EE5BB89A95A778CC9536C9C89D4D32B07382473
+253409819540A30ADB6E771E1B426777F6716E6545BA4560A283183125EC9C13
+8920344DDCB7857C744D47EFFCF74041C1C333A01F8487932A162C300C9FC678
+831F454439B12141FDB6673F57F986B5481556B133573B4FA6C1A0D4F5B71C4D
+F7184647A1603B19C44CB225169857EAD9D7671CC52765441C5F0E62F1E7E848
+570E355A67E9A455E94FE01BDE0F5D7EBB87F84D212D716921C71A769B199D9A
+AB30D0320BC45312C4E38BBB631C0757E9B645E4C2A20E16CF9CB19BAEE62128
+AC8148BDFEF2A0A09CF47350C2D5294B873E683C8E84C9685CF03C8A679F6141
+A2EA6A12EA1C570F4337EF2B3F2B738856AEBDE651944EE417EE490DC5CDF7BA
+C10F74AB654AB0F1E9226B2E6FD4EDA8660B73336229BF1278E3037196F0505F
+EA93E982A818C4AFB39D64ADFA2DCB3CF2ADD990BE1C56F62E8D3960E0EC9FF4
+5CE21214792386125FDC0011EC15CD72D8D630A97C9CC0DE5B6E8F976AE8F80D
+18AF9DBF57A87F3C54A9217BAAB3186444488F8036960AE20C7822A3242D770E
+F5EB6C633FBDDC613EF11DCB5C283271755AE03DBEED1D625100D4EAACABC222
+7F09D8E5EFA4371A52EFF5B4A390C150E144DA7977E1A9A0EFE3951ACB0BB39C
+2530153A97D9F622BAE960FA5AFBD118EA67B659495FEB286C10DAA55863401C
+C52242EB04C4D1F0C9A801CA4FAE161ACA56EB405BBDE2C4FD331CEB508AC169
+0BF89CEB00E4417B3FE45DB7C078D936785E1E10BAD0A85FC2CFD5B0CFB24FA0
+1C1253EA9206BA77891BA5A70ABA056A985819B17A1CEDD319A9AB1AC604AA8F
+1032F94E7D0A7D6B4B8B13BBE7E64426C3EAC9435EA222465BCDD420192804F6
+E714D2E8DF3993A738AAB69CCB68F3950A8C6F5E1544829F165E363985CA8D2E
+7D6142D0E805D899A4FB5E3485B9F425E0AC033ADFF908BB7A8FBBA143F04058
+5AD5671D600370E4ED05DAA65D07E2D59E1E0D94627946BFB400B68986F68F51
+0F714AB9CAC4668AE9E0AAD7CB710BECEB924E0607CEDA68C313D0929C44519E
+38461E8397208798DC42EB96569E06B8B5F43BE914219090DA1BD315E02C713A
+7B9FB98179325EDC182419A5533D66B5D6530529395B0026E3E6F42E186C1492
+4AA6CB0FEB6DAA7ECA8AE55E33F93DCCE8DDD588F6C0099FD9ABE176B7714DE7
+32314BB29A59DB3222C0500B4928273E80190BA5706744A1B8F0ECD8711D98D6
+38D48BCCD85CC9606EB6D122A3A7A940E8E878DD84534C78EC578ADC709BEDB9
+15B155F770031EC63F0DF3AC06EAC93701B79336725D7D401735D4FBC1FA6F84
+0082F3629F8A1FE28EB9C6F21B2E82D13B87A08819191CD38CA90E629DF72E37
+CCCC2D27B8972EBF53A93092B7E72A13932601DBE199FE76322E728B0F1CDF06
+3F5A8872D970A9A83EA2D715FD63DE2B0F24349833AFBE42BC15667CFD3317FD
+029B7487E5478A268FB38911A6894617AF572D3E1908D2E9E3CC546822A95B26
+67393EE6D77226DF9565E518F7B398373563D166C232DF7E54E9352C49739559
+0F7EA91F6451F6CA0AF36E05455376E6BE94E47FEAEED830EEBA1194830406F4
+3D9DCF5644375F06099063BF5C19609D71654B79A7E112A31150547AC4A4F211
+E84B5A9713D5D1A6B19D0EED404A8F8FF0916E428F501D803B7A8141597F8190
+CBEE3F7A6D30E6C32F3D6F50CA187382FFAE4F5688E4A0B8F7D86FB06AD18C74
+80808BA407D5922F858460035DBB906C2798E59EA9A7DBEFD0CEB40B0FFAE0D7
+8EBF81673BAE68F3A2D78E0A89BF12919B23F7FDCE6195E2CC71BA9B8CEA1FEB
+419301AE55BAB6B4947C2DCEAF6BF05D9A0FFAF5C6627491A6544ED9B03AC350
+EE3678A7F69D2D20DFFBF51D83555FEDD670D7B825DD361410CCE8BA4A63DAAD
+6A62985255D5EB671B901C46A863E966F3756E8CB643C4D99052928FF0588FFC
+FD87F4842D4A1A40B8014C9F49488584CE458AC3ED36FB538630EC59D086158E
+624B0461461CA456369DAFB9B30B165CB438B45BB424C0072175B5605484E9C3
+8B81065A346C7C2F6E9E87C8D7120E9982BA905AC1D9B0C5AFB1C34614E6A272
+54FBFCFA0447AFA24A920699BB183B82FBFABE66F4CCB76ACC6A719618B5FE67
+5546E049EE3690FA9FAB9F99CF6DDE0D44369AA7997C9A3BD6C70C4FDE8B55FA
+9237B7C2FC054BB8A152FFA252690C6292F5FAB70BA5CA077C8699F12056B145
+47511CECABD889D54619AE3623DF9C96F571AE2CF0E84BA7198D80827E2F1313
+4292BADCA1479501CBB94E96458286FE127DC6DFD3A07341C53B34EACE5415F4
+FA7289525D3387F192FF315279043ED96C633936BA5B33E50C87298000D6403E
+8CD68CDBF7717AF192D58B1D0709AD40F61BAF86BE97F87D19B15E44E8EE1998
+A08D8088CBF311DDD992A49826DAE01F5FCD9EFDB174126D8BD03556C6088212
+275AEE66C87D7206170B59D3BB3574C86B7CEAFFE6783B1DCBEBB2D2F325747D
+92E2BD137C11740D46707F83CA7D06C4FB4999C7025038C1E03749F65FD56B1B
+55CD3FE9BF1CFD61848394FABD96FA8F3DCC12B78575F592288458A935C84C48
+D6EFB65972C5489ABE4F7F9F493AD6D7391ED98523FCBA75793A151A05BA3838
+86B0E168AB908478E749EDBB899579EB2987166AE82469D6CA346D02620EBDFF
+C343D13F32877D1B1C8D999297615CA528E369C735C011202A22D77427497C83
+99E558047BA8463BD5119188DB3799F8DBEE6A9325949037E615DA246A569171
+BD01ADD5A1BC5CE08B9F769B222700721D5D40B9CFFA2C13295EA81A7E3BD2E5
+72D5877E828499214EC9EE61237DA54A2DDDBD69D1D6890094472CBB0D578457
+67AE2C8A1522513221119A636663C9358600DB82E43A3E30450A91B3948C1977
+73A6A1FC41D295A17F7FA94DEEEF2AFDDC92F7D9C59ED2E934D2EEBCE5E69324
+4BF4C6E7BD0985F6CF3FED06AA3D38B6F9A0AC47F8ADCAB183E05EF9F364EE76
+70084EDC59B25B1B52956AD403A7BACF9208655C7447D824125C3AF54D483BFA
+27FB9E3FD247CFFBB131548343F738CB243DAB71FF1125B8495624D999C95AFD
+6A89207DD279B44D0E3D0E8AA47614BB5C0B823E388BC287454ED178C2ED864C
+B4C711C069CF35FC2A51858F03245072A888837C4F677A5DD26A06A2180D5B13
+BD664466C5F1EAA2B8D7E189926BC5C6BA2634D2ED3B9C6D694E89491681548E
+F183C1C0934049FD268E12AD0EE4DC7430DD943E5EC8BA31095EC48E48A54FD9
+F90892C88B3F789DCE804E2BE8499020375A5780292F92F6411E4E33258D6B40
+FD873AFC1A5D3F0BCC87E789FD64CB167E1C83F2698BB72ABF0E3B9A8C47F8E3
+8E017BAB18F5E4473D5774ECFAE3FF7559119D22F660F34A624D52FF9DC5D3AB
+7DC27E634528D68F8EE19B9055D3BD22DE583CE05A5ED971035282A6A109AB13
+FCF4E335EEDE195007BCD3EB9ABD81FEE02C9F18D36225D73FFB7FE7CF19920D
+0DF9FB404EB83147BF7479A927869BCD9911BB5D8AAC3A808AD8B693DFC6450A
+59B6F7577E5576CBA5BBF02A316AA560074A85ECBCF58D9ECB8833C6FC3584A9
+C7D7BD8745DF37FCDA6BA9486E722020559931E772E2D92C160A85727953BFFA
+4918AA16646897A82CCD99B5C80906BD2CBE4727D485D61561CC300CBA00608A
+4B2404955D555704DF79358313D47C2322327EC8778136E5E39F99461996F778
+6B001D7C3EA79B14711370C9F2D6302A3B0B03D861B1CC9E3BE019AE2CB8300A
+12F48B07239027A91F8C071A4B0B0121BC2AC4441F447AFB4D360ED9D3A15587
+089E716717F41705E862BD9BC2FADE160AC1E50E34A8C452548C2C2A98C27CDD
+AEF761C1EB75F1EE11000D3A78D7AAF6D73882AAED18AD81D7310738DDF7105B
+D87FCECA629533CF867FE3EEA911D501FC57846B15B3D6D1670A878D307B25E4
+5471F90CEE5B7DA13B4B678B7C98ABEB2BAA286847A36FEE919995E79FC0FF5D
+F7C41213344375E0EA8CAED129CFD47759EC157E2336CBE7C6E008A885B7307C
+AAD3B333FAA6C311F17364B38A8222F4731B0110EC629B2FF6A5EBAA2A73F8B5
+A8222083495024AA336BDE092A3F0F4743CCF2CDCCC047B13AA7101F60270E97
+FB231FFA77E495161C4C13126C90C2553152B4040743A1B82C9B86E4B790B623
+1530927199211A6A073ABD594CA3CCA0A9DC55751F561B6BE01FEA4886713508
+E2696C84881BBECF84007C1F35AE1058CD82A0F518EE38D8F7DE7E9C62B14CED
+844DA465B0C4776C221D596BA2F65BB87D59099232910036C3A0B1DFD8814A21
+37467238EF73207CBE0E140C425828C9703D1A71F34C77ADEF9B250D5BA6E711
+3EDF9AE585D3426040CD155C9FDC9CA3C39330A0D16368A6EBE7243DB4D8E2F7
+89C757005B4442DE3756C0FDD2797E9AF7F33C5C4F12F9EB91E9ADA18D84DF09
+CBF906DAC6A2EB34FC3B52C9810C68AB5AC53497FD0869369E467F0B7B117DB5
+49ECD0BE209D177DEB2819182F030299BBAD7041FBC7A2BDD0066899E85A8657
+A7D59F1FF52520C3E9297AFE4E24F5D7A6CA50FD2405F11AE160C7197941A4A7
+EF583ED177FF02A402D4173B4FB89D00E3F7392458222CACA1BD03AB6F6F87B1
+1557BEA2E1813C35D9BE8A779110B60F41ECD784D7136158052FAEF69023DA5D
+0BD098FE0F06DD4C8EB8E7D918EAD4B3034147B075975D69283EE5666AA505EE
+7D034982602CB113E3693B36CA11569DAC460D36A4350663DC57BB27BA5FAE78
+A8D9CAFCE8F34CE0CC1FB9012456B9199BF4EB15F86455C375E2DDD7202E8F22
+2EA066CBF74057F376EE534E584CA917F0AEDAB11D575B392FC73311CEF3B62D
+A83582415690A1B9F8C757CD63B5E8A76B4370F219066DB2F40B0A30DD835A69
+BC91C791BBEB6A85E90282B1AD5D4F7DFF083D372AA75144E70BEA368AFA5FB1
+F636FCBE0D68E1514B9F3663D53018C74B156E16E50B8AF42BE7A045BC218DC0
+1EF1FB83539656806BD4385084B59D47818089DC3D8510605EFF67757536EFF6
+59E51511DBDA7AF45C40BC737C7101663BE4653F91D1D81C520FFAF622CDC35A
+EEF51D8FBF64E7A79F6F7E64787A6E1227F38D73D18BFB52CC96FA4532F851E0
+1E831F9A800A27CA89272E32ADB500FD30E4B7076ABA225AF23B3D43A01DDFBF
+183B5DC31585F6FCBF127BF3CC9B7D50F526C4844B25CCABDF3601337F82009A
+5D84F8148F9DE92107B5ED0505E540A7CF4D03084B8FC7EFADBFC3F790F3780F
+3E671389E07F5DBD70004FB40980589CD64BE21135110B8136D9D506A54AAACC
+1316F7DDE6731E88571B4D7532DAA8A44F9EF41C42EB8D0A666693EDC454BA73
+F8C7B3E58D9C502ADB87BA8DA09AC848ABC111A74A97DC7CC5ACE30FDF52E8F7
+13AEBDCDA654A9EA411141F5005FB7FE3904FE6CFA1B62B41CEDC20DE778687A
+17792E2856773B9520399FFB35473D2E7102592E101C6683213A500E46233FD1
+11B812D95D965C09C1586C19FDC83B04599FCC3AC2798AD37B001B865AA501FF
+AB5E13976869131E414AEF2E514FB8DBA912A8C05F762BF850A2A1A530FF6E3A
+94091D0A852ACF4A0426F5A8F8B446FDB9EB25FEEBD9FD905F3724C8E7C93593
+1844E80A3687128F5EF319310F7F98441A4D7A6449D7518836979BE70F553168
+43FA21CF25406F0F41FC8CAF82E52B5D62281A13F5E7F4CFA2E83785ECE3CD53
+CE3BD25287CEF4FF1D24147AD5BB4B0CA81365BF56A0F33E1502E2D4CDA35592
+9651BC99CBD5BAE2208E10F82A799AE476D6380A1E1B3D3C4A32B75D1597DF8A
+4DD740CF7BF67E56936B2215B34A4A82D04F78A709D8378048A6FEA797C2C276
+BFFBCEAAE7EF150F64199F028FD3BFD37AD2D6C537B7EB3198F714AD747BB631
+7938DD7C6897E77BC74D3636730167CF3F09D11A879ADEC5CD434E18A96D31CA
+048D20C7B1A16B4CD431F2E6FF67E312F88EE37C529B46F0630EE7DB1BBF7800
+42565AF91345CFC59DBA753BB50B307191969D51F9C54F0B030F8AA0E34438E6
+AB187997FFD6F4FBAA1C93D4EFC5CE6C3C7F44BD35D4C90519AD111701B00BCD
+0526B48707B98021F919CB1C720CAFB49B429BC3E7AECA706D1B43BB3AE93AAD
+BE66A53BE748C441A0BE3B48EDD3315A72102B9DC4A52EF56DDCC8CB7D1AE218
+EAF782D35A9CCEE83296AEEDACEDB15E7242ED49391A52E118F0690593185277
+82E9702D092BC28D0FBB9167B9ECADB1F186D6F465F62598766082E60046EE66
+697B7B67FD12DAC0E2BFC536E029AB25685D49555AEFF14BCF69B913E5D61534
+FF92DAC9E2306B6C5447148B71E566979D58E514BF75BBCC745B0A095847186D
+E81D5B0F2504D68D2C210349C249770D96BF26882EF0B3A5386511A80E41108E
+AB587AD77F9A08801A1497851C7B11300CAF2B6373139355B9A2E7DD72FB38CC
+D7E5D6DC2DD846722965816F55DEDABCE4DC1BF213C6A4D75626679833DF47A3
+9927B4F8C69AE6D13CA81A4DAEFEF3CC3A159AF7EEF678748A68102411470031
+5E2D790A627EF3F3569F40FEB10C148E5DB96A9E7B65E6DD80942B04757F1848
+B64A557AAAC7E888EC92309E18CDD2FE4ECEDA60A58E2BF13DC398C3DD920CD7
+BB0305E915F19AD6124DFAF0650852574E695A4FFC9893CA9268F18A0189B150
+90E0D5AFD2D2C6A883D03352856633742C8F96CABBF5BB110286ED4005ADAF36
+278C4E02D6726405803EC46C09A6A86356746278A28A06ED52B4D5EBF5C2A0B9
+5D8B21B2CC805389058A3A6CF8475F2C62E30F2F9D8E8052CC15B53B306FA46D
+D3E066EF8FC99039CFE301AC155DFD15C469C88460E2BA9DD633D4F5D1BAA6DB
+7FBDE8F87B4AC5A089083EDD2E0B7F5ABBBEE247627B07D2360EF1852E205464
+DA751CF2E03104EDC57D82EE8E7B057737E0CE338A01E9EDC0355DEA5B681653
+CE5A94A3FEF1BA58FF39DCFBE892AF4C318468112260D6F522FC70119C1673B8
+66CF244FF2BECA8D2D2C3BE3238EF9F5A3565D8BEE714D9F95F9E70BB5CBBACD
+596D27A445CD0363ABC1D0C7D1E1B5AD8497DDE81277475E2C5B44FBC20A18AE
+E1270E612DD09164884B026F27384B44A4F7272ECC2DCED405C5C2AFDEA41063
+F40C0BCFCD6A324172E548D40CE2B9F38E5AB4B1A52783D0DF0FD7638FB9F1A1
+313C6E6B20D672FCB957A4F9F515992E516453EC5F7B8562E25E12788338378E
+7299415860F6624BCDDCA7BF052FC6F621A8231D121B97B5162E939D7E9E6387
+6F24FA9B85933DD49AF56ECEFA97F4D8DB20E53B7501EEFE239A97A372E416CB
+C46F5A6ADD5177E510EFD875C764EFB8402FF08389DC33CAB4CF9C43DC2DE9EC
+B7A0586BFC3541A1EEBAC6BE23EE9DBF8A0BAE2AD7C5B2C898EC598BCDD4BFBC
+8DC847B48627E5AC25DE7E86708B7C5939BAB3F20CBF991627EBDF535DB6020B
+097082E7354F5CF9CE71C25E80BBACFED8526ACA994242373B3564346F4A69A0
+1ABEB28AF12129BFD0FC46A4195D942B41E00E0398F32F22A3F0E521989FC3AD
+6A07F0BC7F6ACE7B76560124E07A4BC895313EC229D23D9284CFE7E89B8635C2
+43C06026993ECC9C256028AD1D12919039CFB26A5A100A8C9987DEB1ADEFDD49
+7FC64ED2E1B5A403B8BF0218BFE6000A36F2B14E2AC5D6DC1A6657197D4927CF
+747269F5071ABCE9B4499E0BE95552D0C78B2C08D3D77430BA8760288EF18FA8
+1DE420B9C03D024C02CA4D83B231097743B696272E397DE61B83D215C10BDFFA
+6E1600CD9BB14FEC061D473B512D6D9A9C7E452DEEE45747B913BD6C04597523
+6D25B202EE60CC4898C59E0EE9A08BF35E99E1BAACA5E095AD88FD28ED1F4D27
+BFE1FB244AEAB7C6F6D76DD96CD78519527CA2067F9FB660CF22B0D882031A9E
+8D4435D43867BCC8CDBBA47A252714D94B4CC01FF7B785602A54831699264E1C
+E61E910B3729525CA41F657A81C78B7FC61E338FAFA638B309E04B713AF13B12
+2967B6C7142A62294FED893E836F18E5B5467EF031247E7DCE25D3A1ED1755AD
+753AE60162244157AAB73912862D2F7EA61B3E926B465E1BD93E9588D60C3FDA
+AB117FDEBAFC0880DD557231FB4A342D9B7920D88681BF463AA5CFC31BBA8C64
+F9631777A73A1ACF71CAC422EEDD41F5BC000FBFCEC1735BC05558A353AE25AB
+CEDD4E466BC49706C65D17BBE72614CE8AA6C0292AF3573A71991061C228A007
+40843FDA41CD92E64F4A0F5E1EB74CBA4F0129044A415D0498963B936B7DB079
+663B74FE2D43D9BE00DB9EF3601BB2DFC9DF230C300A9E3BFA0CEF3C3E4CF3BA
+13EB24F8437AEBAC98C41F3293DB4AA8330430A17D35E86CE60831F994E07124
+BAC9046905D5ED52405A82ACAF05B2FBDFFF49544840E39F6BB6A2F9E259045E
+7297044DBAFFC5F731B740163B46C2BE0B9828F5304FA41B7577457D6CE965B2
+D51DA8C2E10CCBAFCEA39693881E1679F83DD906FDEFD24EC86AE6492282F2F8
+DA8054A4AB1E92EBC5E0C14B0D6F1560085506902F31F9F3F729648A65F093AE
+898EC1CC4509B852E23359376038FE36F82AC690035097DAB1ABB95C27882FCD
+17F5D70CE139A45C8B9D5B8D5AAE7F257EBCAB92C129D5E5BA4B9A0BC7A3F649
+737B2E8FBD40C567AD5D20DF842115DFC2B3517606C8FB76EAA620F2827F036F
+1583A9BE8B2D3F793AE5DF21B4A5EFA4505D543C04251ACFB4B59A375884BE8F
+FFBB196D45302E97E568142E9448A863E13DA655861005D46DB5CEEDD0B7862E
+9FB35F4C4D181EDDEA6A35D4911BD520E8DB72EAB924F09DA05C3BBA6BD43AA5
+C1AF60D163801D29A40102F3807656139B87E39B372120BDF82888653D84DF4D
+E472E4EC99FCE84BA0BB11B8EC91D0009B35E80FEB1E06E5E9429D04E4054914
+775E013EBD7BC2E2B11420AA53A826D986761E612AE03BAF84BC5DA80986F18F
+B1EBB59FF860B7882759E8220E6EDB2DF4F4EB271A966FCA24B818F3ECA9ABB8
+AE7C2145E6CAE43C613D10412510553F4632DFD370A18C02377040033D3979FB
+10B4E38E797BAB69CB289B268323E24E9953EA0A8347C5B0066F06AF588E7F12
+7BD5E268FB45C815B7B01B7C9039B4D3E615CA88FF2A3CE551BB9CBA98C0E60E
+E6574EA78F2F1B0628D49CD3431EF6913398D16A6E6901FCE971DC1A740A4129
+F7C4CE0C1BDB9B35140123869DB300366B6F9B6505A944D7B4CAD9F1BD32B44F
+83DD9864148A37D0D2D0CB25997FA93E5C279FC6F9C178929A1A12CF0C4C6D51
+C7D2A3108D8678E9D22DD536D06117D1F6A74F8736696E6EE8A5C7BD4B89614A
+2D9BBFDDB86501DC111EA9AFC1AA52B92CD67AFEBB4852931A8BBA255E2D666D
+E76EE0DFB5CB05BB675CA37D86991C2EC1B8BD9E228A86842F4490121F07B01B
+4FB2D76E9CA787C2C18F4518015CC27C0B863AC6AC5FE61524F967F263C27836
+549A87F0BE30A3E05FE7E1B3D5747ADBCA4989F31B6F4B26201185D48C67FFB6
+64DBBF2F57962FFB4729EB2E3851752CF5DB614F3DBA79438CF9F3F5C4BAD1AD
+C1F2BEDF37EA5BF10F17E833B793F0B3DA1A062400F759C55523ACF1E394FCF8
+A29ED0F254C1AD90FD7E4EFB7902C568CB711126D6A1873D9E2E1ED46E3B7D63
+946BEF6BA3A46FA3648588B6ED6008484AA54A1126E9960761FE892CB18CE8BC
+E2E36563E28C3B0703EEFCB4E8FCC4E56BBC76D1ED48E441CC61BC8E84D6D718
+38D3FB8EDB31A42209FE7D0967B9138C045C5CAC943954DB401FF641C1F90FE3
+E47A18C26561A2F9EBE5982CA88C4F79B4013622CDE6D53D6FA572376A4C47AD
+CF3B591C0E1142AB4075533F4EEC3185D9C5E6B04359FFB8F42D90434A48E353
+744C5CC997D4F07D70219288B37327FE1A256EDAD6E0D36B2FDCE6BDBFDE772B
+12616398398156852D7335AE66B6EACEB9EFA48B9C1FF06C5A1E7B2809A11009
+816B9D5DF7BA2C0DFAA764FA4FE1559D83D557C93C097820F1802F75B09FE582
+B3BFEF6C51F8F798D23D168DC902E4FDDB1BF3964A3A229C6349590EDE594BBD
+8C4779D739FA531DE26DC4151398FBF9D74F735FD5B541D015D0D4FE80741916
+59B182EA7EBA1B3B18B4C70E19E5D85D78AF3F8D422AE89E722E0205BDC8A9D1
+15705A1BD4A70106B4FB9C1E95394A6E0FA4B437637653EBF43CA37A12B2E127
+3D86F34C7EFB3ABE3531D36263C69C0AFF00AD066864F750CDA375EF7AB30B09
+E5411618FE220BA27237C58E7F4C5D2A55BB05A1CCF290F21B551421D809843D
+93669BEFEAD36E0E05175E55E3342BD752B9761198B7A2361A3DB424AE945449
+7A662D0937EF22D41BD0F66A921EC05EDBB47DB467203FAE1344641BD62DDB9C
+5117229B0C9F2A0ABBEC75ED327415B246EF996814F10F032FA2DF071965C2D9
+E08129351BEDFF285314258B2AF21BE64787FAB9CC08EEF5264A2D3CD83669DB
+8ABAADAAE5F5D4FC618D2DE1ED7ECD7D50958B7209129229BB99E6FB9CC1D8EB
+25B92CA95DB347A820E185A49967DC922928E48DBD8BB4F2849DB80A5588A7C3
+79677BFDC01CD10215C01270B48911C1BA3E3D5E550995BDBA16304D64FB21E7
+0A2F0B10B312153236D2AFC2FA7793FFC3722597CC4F635CEC917631CC377558
+098458531A62ACE6064F57498A5A3ECBADDBB8F87DCE77B0F4AE8A9FE12BA2AE
+86ACA660A1AF53D9818E724306D7D2FA990A84EC7E5503F3544EE7E8BC30E00D
+8C2C8D1D2460AF32D5C47B30E707CFE0C4BBD8DCC5D0BF1D0A947D0DE81A6226
+4C7420B25AFE93B4293449890DF6A1E75DB6EF3EEB45D6B9B9963073208ADD6C
+83236297B44D001CF914D6579ED40436DF2DAC6D22DB5EFBD5A3E468030A4A47
+B965B96891184D23F00634FA9D034069C5F929CBD07D3F89F5C43A24A8D10949
+57005BC88D375328A0444210B3B5205B17E676E7BF464484DAA04C4C39F93053
+E68B4A580A29C09F1E6101DF4D66FBE016163796041B916ED0F4857E1F8E4136
+2AB109930ACDBC29BDC0C39D120F1D4DBAC547A519435DEAF5A037D3591A6B32
+B47A29C2B2F5D435D183DFBFF6DD989DFC3628AFD8DC6F740F601FF2B4C5DD2F
+B5E0EB09F184122FA09DC552B1A5BD7C793B33CDC5F63448EFD7E85B263C6145
+348E259C76DE888AB7252820AD4C48D92150C81A98A076FAA7C80AA80537E597
+548C33C03D86A5A25012AEF37744D463727675640E0C37D15B6A62CF2884D24B
+CF08B554E45EDF00DA4DF459B7A1391870297D7B992FB84C8316A18D8596FC07
+7A25A11F161BAFBF18900D50AE0A945E38DE50C0E36839E56CC416CFA53E384C
+919E36B9FF7A5C35B087A12E4970C229CD73DC11151A80138D28CFA3E6109137
+1C004D42F6DA97E28D31EBCE892E3E446501E52CF29508C27A20E1E7D2E719BE
+3188CAED4BF91E5DA4A4A0556BA295BC72109460F1968A62641029B71AE16E6F
+65CD70DC7D352652AC73026671C0E8ECDF8DA070288147C320084869EA0489A5
+CA8A865861E2ECD655FF60E5537E3AD4BC828D98F31D7ADBF1D628425BE39854
+DB88D08849
+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
+/UniqueID 5000803 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
+/UniqueID 5000832 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 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 58 /colon put
+dup 59 /semicolon put
+dup 60 /less put
+dup 61 /equal put
+dup 62 /greater 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 74 /J 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 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 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
+7329622828B2785C1A8B26351BC7448C1719C88FE99BCB73F7DEA427FBFCDF4F
+00EE079B0C712F7D2C8DF98D4830A9D8C8B70A8C5D54BC1DF3171135278BED55
+DA1CF0E696B12935EB59B606AA3ABD3C4AF64523F37F17811F2FDF3C3613D391
+4135AF68EE5BC68A94B7FCBCA3E246145710C4509F2756BEC93C6432DDB7D1FB
+1AC28B04BF3DAC8FDD209C70847101F4BF1029876A80A6E4AD20BDCE4BF93543
+5AAD174889D7FB8C85758F4B543CA53985865F40B13C41254C20DA63D64639F5
+83753EA683A55301CF59F9E7DD2260BB11FA41ACD230B1E0CEFDDD1D4DFC4037
+21B3B1722CD733E72674043A327CAD96B53D99DB80B432899ED1D9677A4F8D85
+24778995AE143572154E8CC0A357F2BEBBB9042419A511CFB272AFD4ACCE34C5
+2FDEE87E53945816B7A1E4B6764A0F87848033C7BFFDE53B3B31226325A27C50
+FC50685C434D4EF1B7D1D7CDB0C0D4E78DA460FB06216530AA86C1A0346895FE
+C1855FAAE316E0BA82D2C8952D424F7EAB83B3F3506762286E5F5AA0B73BE21C
+91DC891ABB0F75E2100A23941B8257A2A5EC3F63FD62DD09890F4DF338C329C5
+1B4D770CFE91A1F64927A997285662246172C4E231279F817B5AE06B3AA1DE35
+02DDFE93014A01A024E2DBFF02C21F3CC8E75A6111D933831D77C64CF7390E8F
+0C4E69B55D1971CD1648A8C252888EFE008BE5C4F7292CAD13420A57E20E92F6
+088BDF5E020B27F5307E54B6F4A4858CEF9F21FC3AE7F79A3EF605898309C7C3
+520F473EFD7A911DD1A35880D5DB01E06888CA7BB183F54581052B6788889291
+E0C9709DF0F438F4F0B066C265087B1BF4FFFC1607D18B8A8F3F510926B3864C
+F2A8581431B24153567AD17C93C29A9CC5941046AFAD5A18A1F5782597974262
+5AADCE62BB060DBC297FF21649EFA53594B8A0472536D090A4E2F757AFEB164A
+564BD316D81550BC2DD9B3B467B9A6C6827FF1A03AE2B2BF8873C5EB9B0A7221
+4EB51EB6E52C6840B657BBDCD6C94522A8CBC25D948A6CF3657380711FABEE44
+F118B3432C7098C9E97A89BDA2FA8B5BDD20FFCD043EEE980612A039DF43CF52
+187C4F3B144D8A44DC177CF02CDDCE250F72D2135331DCFDB8A83AE84F8ECCEC
+5BD655F8822D5839E2BE14EC752BCBEFBD25D09EAC0C334E5E1BB83E0F6AD8E6
+CFB0D266ED76A3528EBBE402F1A0452AFD280EAB58B02F67E9CBC1805593C164
+12F1D6DCE02BC7B485CC108C6321EBF1C3FE36D398501D27DAD12D293270F8C0
+4EFFCBB4603DC5105E8512FF3D72BE78C2AB7B1D4EE45BF118B049BD0C7C9209
+4F00C582E7F16067CB8D986A2FDE8184BB082086E252F2D8177E357EA977B02A
+371BC8BE7F19026F198BDDB718C75DADCD3746E70EDE1ACC3685774B2C38311F
+93AD9EE5E71EBBD22E635AB55CDBDA2E342B42855891C717000DEDC7E3F85820
+E02321A5483186880B7F74D8945AD99BE3B7E7C697630F9C4A607450E8A5644D
+FAB5EE426E08854C981E2059977E3DD51C3074E04673F0EF8D6FBFBBA034CD2D
+2206519D5364D341BA34101189972932DBCA19F86E3A244233A0FE4BA3C647BF
+E7467E508261D01D7B4EF7591BAF2BC316C2B1C636071A222373539705296908
+701DD13EB5A25A47420491CAF1794C18ECE395754137D9CEF904EDEC7E4FD9DE
+ED482739CDBFB182312830DC3D676819684AD1DD2D4294FEB9F6F72F92B61A91
+5B72483ABDA20B93FD8A6C6511E6509BA758BC942BDEF242839E34803F7CB76F
+4723BB02264B1BD51E3FAF9CC951A3385396C989D5C02F9BFD9DA4B0A804547E
+F543E529C2C074B174625074FAF4A39D535497FC6FAFF0F644295BC12C1C370C
+25AA94FD960F51E98564187B614CD62017182ABB05B79FA782A902F008AB5B92
+5C512A014D5B6702E3637AAC78298AD1E8BAF80C96264722C4B07BCCCDA9F534
+C4587595D6A9CE7E6C478FA0084E9DAFC8DB03948C49B1F36FC526DDEA73EB9B
+18FE7504146E1F260D64A894AA1EF4029EE53ED487E21AB296B66BF8D7DF1794
+3C93A222AD65F804D5BDE60D792669DE7F11CE8C2C91D179495310E95766A516
+5ACE5F32A5D27518EC1912CFEAE37CE24749A7E86F7E4D040EF75CBB560AAC79
+FD39E2E13946F90B98D5CD9EF55CB2139C8AFD2A3A35416BE740A541FD5F76A2
+5B2CACB8BEC5584898884B5284C18D4FCBB6EEF0D1E8D950F701529F1C4113C4
+2430FA0201D1771CCBCF7D7A1CFEA435412A7977140E81FD454B0717C5CC75BA
+A28FA89437CBE9607998FFE13444D086717FBF49481C1E713EDE01FAD4C2B34A
+084B5770B5B84E50F0354845CB093C082B5FD76E00340B36E5087ACBEE5F2648
+0CC9CB4067A28D41E87E96A864F11E03B285AFC3D8A7463331E3D105CF17E327
+9240CD7E87AF879F5B083E0F5E908B54552B434DAB18D387013CB61CD8092482
+C98A3F26E409D89FA714B13F18D8048B24FB6390C83EDA1C884762EEB3EFE69B
+C2BAAE7B17D9845CAFF9B5BDFFBB3017EFB793B2A86C6111B519234A18987DB1
+AA8FA2BD11B440992016A2DDD2C5CB1CB0DDA0F44FB32709CC57C46E083C0034
+671A4E268BBADA4583A16C3C57DB5B364C3118B6C788A2D7B2A1A2E09E18B28C
+6FFCD28703E87C2514E7B70B97EF403DE40899EA41C6E151FC454D0F598F0BF6
+1BA401E4BAEA122482F87852C2F343AA0F49C59FF583E7A31BD13D9898F0F150
+1903C4A2EE25D893676DE5025B168C19D506CF810056FFB04F5E866DADBA7FA3
+AFA7400463366BD1EE17CAB9B89B976FB896B19597E3E7D280EAC4FFA88445EC
+7F4E5E1B4E2264334F097AB23BF7847EB3D69F4B68CE7A55413DF3331A010747
+FC044EB99EF526F996D021E38C9BCD5CDD8995DFB84A4F4F2FF62E9F727388BD
+9D76A1EC85CB0C38B8978989EE3E8A68068E6C90ED40177315F4C1BC61A3A8B9
+EDF1CF286DEC1191B4F47E9B4DBFC283834E36751300AB9F95CC4655A573CCFE
+928E9213211106B522C41D9D093B3A24AF92511B7371AEBAF7CF50D5C0ADA9E8
+FA65D2F2CCD4244EF3A7EA5711A14991B0D8723CFE447CEA6BBAD9AFCF919B1E
+79945E7B742AA4C2A878AFA9B465BB80D5EDB8EE67A410FDAE034C078C764117
+4FEF7A3BA6E3B8BC7A603F3764799F8A1D47E344B316D5EDE074FF0634791C86
+47D53DB0F2E177D448FC185EC14530303AC554A3A0660A697923F8CA01ACEF14
+C8D82D20523DCB49FE1EBC4A5F51333B0A1B8EB75B4A83AC90E60C409D96FCFA
+C6868E19BB5487527D316894B2B8F804C056B1535AF5A70AB9F9C732D5E671E3
+7EFC6137FF68D4A5A7BBC6E7C30B4F0AA6AA8406BF97C0E482AAC5A8BE97999D
+A376DD186E61F981826FA378A5BBAA6C0A668FA64A3A5885F471F512AC73798C
+96681F443A4652B1D3DB9FDB250D2268D66335C713A28E32A17CAB8F2F33EB2C
+6D499C0B8A31C483280D7AB5D913DA8789473059F0B21E30E7639B8177C4D6B8
+7D02CF94DDCDCC2D31A0696B35E5154B27406ECD91A6FE82529B62628D47D3E7
+A4321ABCC84BFA407C2AB3B726AC41950EE2F46AB758CA8C093D49F153797420
+13A561A921CA74613004421451890D9C110BF0549C499BE79B2FBB8CD9E13D1C
+A415FAAF20D32796108178894DB3009AABBD16AFC91B315C8559664849CB5ADB
+A8E344054CACF23E008D1E91690BCFC061A3ECF129957899FE8DDEFB6FA14CC2
+242F7B664D3657BC66A83396B94D79066C8DD8439E72867540D3AC75FB611C47
+841EA7631B8CF14D51DB466885D32686668028B855B158C5F90DF75AF8F73B7A
+99B0DF1571AD2FA308E907B8E446B3EBE0DA8FA14F83C12200AB4AD0781F35DD
+E26F8ACBC585DCC2DC2CF53EEC2B292A267AB2DB84AB97185DC8D73903BFF2B2
+95DD4DB3DDA11DFAC6AD29E0D7F0BF25DE9B76EA7542610C4693E8530E70230C
+2783389E5EA4BB028D83AF4DA37374C20CB238AD6B9A54234FE3FFE1833B9D37
+6DEB4F410C67B87370C2509335FB2273E858A27AC35E1063F7CC9536EB80F22F
+3F8A03644FAF332F59B9670738A73A9E53563A3718519519414EFF247F4F2682
+CDAD8853DDA6545D45B48677DB695524BE0DD60DC9AD26303755A05E27D73D14
+4DE465DD11AADA164BE89D798BC94D1BADA5EED5778CF8A32C464D7140F381EF
+CD2D3CA344765F4A8B59B8658F3794735261B8814C50CB5F29B6E485AD62756A
+7298010E83ECF4717CB70C9F40E3F2E0FDCE064578CE287B5250C0549BB96055
+D7E289C52BE6D314973594760B709A3B18914C954AE038921FF4618CA219210B
+E64E64CE2E139E74D51A1A62B75238FE3997E64A2986C00540200F0CDC93E0A4
+44E7117D802FB65F4066B6F65A77DCDE3C328B91BE2D91832F12BC787C4430DE
+6C79ABDC1A829A7AD374CC14327DC36FC6453965DF3EC8E9B8FB2444CE62691F
+964E43716BC0FCA1D65B41992FE03D4729587454EF9D5F48E914A6496CD9BEBC
+0657CA9669E17AC093FE4F1FFA2EB8655E0D143D33D18AC21CCB91638FB564DC
+160FD5305489339AFB286113843F0C60F26E5F200E1191B3204A45910597A416
+A308530067BED101110561AAC1BBB02B1FBE36412860A3F85ABC90EBF424F04E
+01881E9364E9CFB1BC7AF35466DBE6B6F74EAFAB4DDCCFDB00C0A09D082E768E
+8BC6F04164978975A336EEF6C31E6E16AAF4C17672A364FD46E6C69FF87D0813
+580A0DF666726AE972076E348E41F321FF58F16322F3A011A8F76372C9E9ACC0
+7A2B16CEA8AE3FBE7782E69FBA346080362C6A7EADC49040F61DEFAB0ABD6A61
+FCDE7E708B9AB83F58043F2AE579C8DDB2AABE573A5E2C75B19653C3BCCAFA1A
+1B3E2D7C6CA846E337EDCA0AFCFFCD3960DFB3C533C612CF2191981A44FE0A04
+74E08AB2E746D90F9A30A412492B0669A2E4E02DAA49145093977ABFA8B2E534
+4DF96BCA442F83419E811041B91591F23C29C1EB5D3B8D701F68D26925555FFF
+E14399EAA48C6606D574A72BB47DE75F9C19109350A694930CEFC21EFE29855D
+7668E38B66194EFE8EC613C294BAA8A67123E57BEBBAD88FD2EE94D29141846E
+4E5BA1D48A8A22F2FF8608F9F906F0C9D39BE92975F4D4CE7E005D3E19E981D6
+3B0F1B464FA92480B12B57FE9A2E31615733B7700D241AC33BB8052873DC9925
+FCAB449A5AD6D1A23C9E9AFF2B7030EA47EFECE4BEBEFBCC33C51E48A515C406
+D605BEF00B4C5257C717DD45839EC34B90AA170911F2ADC86380571A9A8F2A34
+77B3F37AAD1D77E0C03D185AF22DDC9B4CC3BF7B295FB8E36D5FAF625A779524
+33AC16619E0D440B7259B2C707149C57F939C89412141E7F4AD6765D202AB55F
+722CBD283108A98295A399DFD3C62C04563791DB78EA6CEB8E04812B98B1DAEF
+797F6CBD139F82CED0F0E4BCAD85AA96A93C72BD26E0BA6A16166DD965512392
+071F6D6A73F06DD08DD1971286DD5CDB3E72ADB48ED3B6C1FF88B667B4933157
+8ECF6BF0A5D03222CB92A70D6082440B87C3FF4B8C8B3EEF97A54593A7BB4186
+CB9DFDC89E8F0FC209CD09179B13F7A1BD00067CEB72DBB8C9E7861B845CB17C
+820CBBAE832542C57D9AF7A358F6C20CB6186B3A7D07F0F14B9D50CB5C774FFC
+45915FAB123E363C6F3458BB337F0E6842ECE75EEDEECA530B438AA505F5690E
+7625E0ABF624F61058D426DD45804A75920324746FF536C7DBEC432B1C8FFD86
+6831A320D7F6BAA13579F4554070F3E2228C0A01CECDA33A6ED573D48AA5884E
+B396E88DBF79AAD606F3F22847DA7CB4ABD9B410761E3EE6633BA6FF33A52382
+81532BD366316E72B1484637AD3483CCC265E81A308315B917A8B9B9B6F8340A
+61987E0F5E41478F875EE353BC97B5C186105C4A043283539B5D27DB8045DBF9
+4EF1C43276DDBDF5425A6D620E59E72F38B28171FC086E0B10EEBE23B5D3EA6C
+A44932FF5EED4CFF55F9BF019114BC754D919ECB83D21947574FEBCB78F548B8
+05C89EFD64C2BBA15B2400CDA9E1CBD085C876C98EED73DD750060BA09BD6D59
+F3956BAB72059CFFF36DE5C65C22554B317077D9C07C0D3FBB4F42BC02FEEFE0
+AB6252B63CC368176AC96AD67D2BEDFE4447BA49FFFD1C8EDD0D19B52B1761B8
+2A8270D2BCBE410BE3F6451A68E83A7B0134FE413481F80B7BD585D13B6FBADB
+E8B6167E32630A7D11A73E278954740A4B18451ABC6D412424EAF3ACC159EF5B
+4A7857122E3B456DEC70795D4973A7F376977D965F2CA82F0528D199E12CB32A
+CA85C5AF4B649D3AEA47A2FE99471FA327F091D3C3AB27456BCD4BC6A991AE31
+1AF8270E1C88CB006C7C6902BEBA033419FC34CE29CEE5656DD9F88D7E5B278B
+32F00A499E2510E11FB4D4E133CC58738C8BA7FFBF788A5F85D0E74BCE606476
+C6EA9B3CEE92EBB23F726D65DA1F0F20FE1268F060E9A289BBF1A7D03345AA08
+788F1B1C848B2A1B1DD2E8139718F1380E810D243B0BFB35739407CB2D522363
+ED31098708F264A892954C42BDEFDF99664EC645753D981073B25CCBD067DDE7
+414D40783DE4754CD2C62F17906D2210E70AADD6F29BF6BAC66679D8F1880700
+4027E171E479FC56D4FBFC211B6295BB38D9D9E2B12A97F903FF43AC8F7564C7
+5D50FA924683325EAB931F491DE7E08D3738E627ACBE0F07AD1D2E71C6ECF8B2
+302B2C8A66FA5D296F77F06E0FFE935B5052D292BBC5461F157C6B3945F5898A
+540B14E9D5329854D5CE4693108B9AE5852495E9664B21C3559F930517FDCE44
+2F43B27CD17118E467D9B2CB3976A3574D2E472AFFC00B1AC35D3E4BFDD5B5B9
+42983727947C06AA5569BBCCA521FFC9B319B676C7B4A05EC7336CAC12D29D0D
+18F5ED635AF7A56742B96EEE6AC017446194FA2C478401CF5F031CDA48F9A596
+A529AD3B5ECFF7B9589EF18E1AE6310FA269CFF6FEEF94327ADD9801DA70791A
+9ED26840D5F06237011FEE147F9C8AE15264897F5E97E8126BD8F61C107DCD1B
+349BAF0486E795D21C6A8B86B31583209412E04D73B7C4D1279166C06D6675C5
+3ABC88AB7D5044FC6C7BBCFFF824A9A14AD71B772FE65EF414D4170E8FFFD191
+22DA5150FAF2AF0D42FB6A04AC0B13FE42B871C4D8C47FA370E9EFA7845A3A76
+0AEAD4767A81DC676B7C93152BD7A490196AD952592517225663C2BA10970587
+941FF617C3F9368742B0ED4907BF22BFA7B1042D14E856CAD8A1B49E3BE7B3F9
+E4D35306D6077C942FFA2A0985AD1B80FE591826B6481EFD4581783DEDC0CFE1
+5F974652B817BBE3B366395A723C8B127D82508DE7C57059E14F5359C227636F
+BDDB85E46B104BCF966CAF340171F7991744C415EB9E37B15BE916560B985E6F
+06E838F7245B13474391E6AD5073BCEEE061EDD55D177ED98DA0FEBBC21F8469
+1F7C38D844AEB8A91BA10C6A736732EEACCDC91157C3CCB1C5E643A341FA1BC5
+F2BAAD68496AEFB7536A45D3D0D0266775B2D6EB1ADE0874122EFB31AFB1B732
+FFF910B2041792494691B6551204341DC01B4E247712FBE004E75EF1CAC17D75
+DAB3418D1680D379F20DEC3EA0F2A1C186AF2A389CE451D995E2D155BE09D74E
+DE54370163D63874C6B1F413BE0A91CF44C62163BC613E12F8CA1D43D54DB7DF
+E87092A41BAAB75A34EB8435514F8D5F7932C4AAA21B870398665AF307B56A21
+675112C3E2BC7AF883B575A4F383BEA7EBDFD61F02711B3AC51F4A4A0EDBE2F7
+DD7919FE4D962EB5916CE95599C00FCB3F7020FC16505E80CA082ACC1ED9DF67
+D3E789BEAACF1C7BACEFEFB3841A58603D310212C5939D7C0DAE823566167925
+8A001880D27C0F7D7395E198E8E49A00DFBEA28E3355DEC4A25101B1D5EFDBFE
+6436EEA878A25F99BD86E8E38E90D81286D3AC9AFA4D6D9F4FF9C7F5B2ABA4C7
+45847D83642EBF0FADD27CB468A38735B6A5BB0682D5AA939EDC093A4DCF9EAD
+23FE77A40B690E1FC23994AFE80168142C96AC55D3627561340751EF9DFFCA00
+A453BF7BCD12C5E610C677657F4B7EC545490D2500C99D7E64D80D6473E639C0
+C60716D93C014D4C6C002FA60F05C71985A63C0971E5BB1DA70C31C4AA5350C0
+4E4D6FFE82323BBC11C69A884657E362DDFD8163966B6FF402DD7329CFF1A6B7
+B372DFEA2658515883F047256FDB45B7FF65C5C17A90A419FAFE508B7C907803
+6E70DC5B10136F37B53B614D5ECC918FA981F79B604FEDA0E9795F820317322C
+5064342E3F149935A3C2BF09A01A3289B65B702DFD27BCF02F435D7E28FDF4AD
+3BEEA50F5F70F515F0E2A521099E69454158CEC06CB9E4030138C8E6E435043F
+E03050ACB3FD1191AD9A499F11D784720B70D99DF8A07F38BA24C51D39E40217
+F236B7083587FC52332304884EC1C53A8B74A7ED14D2740C3211B9C29388D98A
+E7FDF624F2CE1BE9C907A4DF0C39C48DF7F73F0DB9D37BED6604CE705626E9E8
+4A1C21C5A5B4E0C454C8C5773503B5B6255BAB0E7E0BB93AB12ABA9BB916D1AB
+42AC68BDB2D5C77683F91F4E8061C99B5B86C145F86A8ACB2CAE96DFA69B9B49
+6C11C6B857FD9C543AC2FF753A6396D3DD2D726C7411B77E08F3AD1C124805B5
+C568E4805A38AEBD915511AFA84F98F14FB4681C3C8406B102B547F2586904D4
+1471ACD46DF7133E8CDB064A7D9BB526469525B88E9AF2540F8360C156377D0B
+072801012664DE737B1930F0706BA726C292CC4E57BDBE951C748956CA208ADA
+6F207E5D64232EAAC9E3E0C2DBB83FBC3E45018AC68F55C002A336B73233E0D6
+7A4E2BA11D3D356F0C4B8AA158EE4ED9B954303F8F5020D5A1743801E802B23A
+72DE7FF6B4C46A2A1134FED7745AABEDE0A4FAF84152AF9D8BE01BC95DE5072C
+562E772F1992DC335B6EC31159E99E26DABF54331E3E9060717439D9B5159AC1
+D27DF3643601937E9A6F9829A5A74FBA368135DB44092560554A3B7BE3C8A4CF
+6EC85D66B57852E145023504B631C524882493151DC51A1E1F603A89B60B0537
+C4705AE663A9C0BE6BBFD894F44B55E3D71DCC5B9F3F75CF234F8B31E539516F
+235A3982B0A1AB1179F54118314955B44EDE0AD4E89689FE1219642FA2848446
+17E61283245DA45E53A6BD2F4FDD179B3B46BED7D1C81EE7EACF61CE1F649A17
+DE43B896B0FF005E3CE39881F4FF1CC8E50DEF6E1AECA5EBDD73143C8189FD93
+116C4B109FB7BCD04051A9ACC99D10B2329A35A18C43F8081A010E93396B18E4
+43CA4B363745AF69A86AE9A8EF03CE7F32D80AB8DE4F76DC99DE120503F41A6E
+5EB2737787DCAB6121930315A2D4D7BC4CABD380A6157F965FF2B0C6DEFAB005
+BEFC5E21D42DF854D04A476F010C0F1BB5229809958B8234D2E1114067C9DCF4
+01049F26BF96A738A8754F2352D6A823323528F7FED40408B707C4D5994918FD
+D77A2351FDBDFFF8BCEBCF0EEBC0B8ECC8EDA0C9E7A0E7255872F5BC5FBB147E
+3F400EF1CC6911E17E415C680F1FEF45942CEA34D36332114343ABB8E2B4A24E
+997AAD350ABEB39DF4744ABD7FF51E05F1D3666C3533756003C3A29D8DB3A8BA
+4951821EE23796D06CE5299E0709750E99D4FA6C91980409DFDA1F79F52E3330
+C4BC6B1A95A6A30FD14433C2C69A89B75BB816E5073A370425DBBBADCFE10ADA
+FC4971568A2387A25E591E0531A4427239CFAEE029AA3BA5658743BEC089A9EA
+F9A039B4824DDF81E826A24F370DD7A5A0996B0BDCABA541753D9C88DA4E45E6
+7C73ACFAAC12C7A106340C9660A361CA89CA813483CCD89337CA2C103C7A8A96
+9174BDDB4A9D7610551140169D14D7F5A85124E0ADE6AFD59B97769F49BD355D
+7FFD16041CE31D54B03BFBB05D94BCA45035F5DB1A549EEFB77688768D323915
+E268B7075AB76507BFD237AA483BBD99B37F023D334E497D01D17A60CB1F846B
+3D47C68ECC766D732836B2AC45F02A6873F4487020E74FA1E60F6F0364318523
+B18E94B598ADB9307B31833239DCD9E7631B7C14359FEE2EB3112F2C161B3676
+9446510526D73C8F1577E599E5C766DD575C0A41B4199F2F1E11D69A3B9F567F
+346BD8E2E2B31C5FA0719A5CA75B740607861F839C7AFB739C6C5F57E2E4909B
+2098B75A686B66A79CEFC758D05A12F4DB3912F65DC853C073BE751A97A14958
+F94246E5DF6F720EB44105BAF3CF2BA853AFC834EE6E5B6C78AABA8B90F76E36
+9872438AD860E47AEDD9F56A6197371F30A5CAACFBD7BB14553094366DB49553
+B96EB52DD5BDDA6CEA48B49E147F09290D30732970F5CD1173B0C32B015BC0A2
+E6FCAC54FBEDE0B9EACA7BB412D44AC5D4F5AE33A856BE1B0FC4F8644E9950A0
+57937F8EC699D7D156525F32840BD3543191292B797766B3B030356EDFE64F44
+951905B3E1FA73C2E2A79AEBFF430A215F61C722909EE0ECCBB93DD1132C3EC9
+B24036DED81C88D914D26107E6C8A960EC62C2FF55D0320DE044DF67E8F40210
+00EE95EE2754D50037AE808BD492EB8154EBCF71F865B73D3C01E00CB82737F2
+159629716EBA84830654982F442A1E552AEF68CC64DC7B3DCF292EC2A2B5E8B8
+3FEF04059DF918D8D1426BDB25789124E216F0188EBE8A4D84792A247440F8EA
+5088185471D89778AD1EEC2215E7827E085D95DCA357B6FAD8549A032838E66B
+747BC13BF41E1A555E9A7C3178EF6EACA2373D7CCB8B1967AB045CB0546CD396
+FBD2091CE212E5C56565E92BB880D6EF82081430A74B9B1AF05663B558378EC7
+C089BB059C0850472B81E4A8DD9124FD06EB9EBE7D919216B45B933D0DE97332
+530127BD145B70A23B4727457FBC7C430E93C576A040250B90CB84E2AC577DCD
+EFD56CA21BA33768E54C10ED7CF711B62B4937743AFA789523A623D92FB935EE
+DB3C483F32EAC101B71B85C4E83D77C2008FB48C1A125F5FA55D41CF40A25AAF
+5F31946431B32E4773012D6F240A4FFCE6FCB0735E0B344DA2240C86BE6DA94E
+29A300B43566E3B0496479C7FF1056C89921E0266B70BB87130A2F6BCC8F22F7
+993025320A1E094417C269A9D3B0F046F8517795ED6B0B2FF59EC4BADF7284CB
+74EEC7C5F3A6EFDF511945CA42A97641A9F54FFC5FBFA569DB2DEE55A4234795
+E3553BC1724AF77FCAA9D07216D69379807878238AD63217D9757EB7E5762ADB
+76E17F14827FEC642BB54EDD36EF42D5C52BBDE5927AFFD0C8B624F59D08AC6D
+F4FB14EBF88708C0C399C3F417577AADDE9296771A7B4CB412556F33B0DCE834
+8BDEB1C6E02B1E7CF67839BCD7C8785E682F3EE100ABF78FC85DFD8FB97FA547
+23B31A26EFB17D1BF6124998B74752F95E9ADA5FCC51647721D4F7F36737A44C
+4F6B95B52F461D44952ECB8115B40BEA5963787E6C41601195322BDB2D23FF54
+3F4867E0EE3B7EC7919E774ACF268E70E09E9BD05C2040250923061768C3A0CB
+5EC133DC129A175ECC9164DB6E233BE0F7DF5179BB5055764D9B1500293576A5
+D5C1AB48CC57698EA72961D68B222C5034E1E8710E44EA188EAF605FD2BCD444
+A04C629D11EB19DB7F1B5CE9434887EDC915FAAFB9C64A211C559F1BA9BDB554
+21C498D87296BD7C8BF4E47D731E1267CAA2944B3EE42DA5C5D1C0AD0A844630
+49EAC5B43117113297CE82EEA0739999362B9B51A22D66B82CC9C4C231CF6835
+65F5B7FEE90154B314CBF25CBEF570D4EB13D69B559B489174AEDF4799226DFB
+866BB5597C07815A23B64C414C6968DF3BD8EC496A29A29AA3CAC820F2F0267E
+F264516781F76FD42D3A0BBB47FF92657C1FF9046EDEFE0B7895B11ED3D783DA
+C80DA5A4BAD159F0104CDD59461019266FABAFA4E783A92DA8076ECA8885F1A1
+EFA1EFB2ACE247A0321BF2B7AFF561681D2E5567D1A5F53CA7B902D6B7D23AE4
+CAB3235D78C723ED7C785C6060DB75EAC3FED6F265A191CF0EE5016477E67995
+3931EC372EDE6CCB91B243A3CB8B969CC57499047A14B904DEBDCCE9FEFE062A
+EDA52F1ECC9E28BDCE49382C2F76C4B41B21382ED5B2DA7B1EDC4060C894A1E2
+A2A2FFE8573CA6890A643C8AFFA53FC67F19B81336BACE02E2E17FA1074C80E9
+69CD67015865DEB4BB51DA8BDF364A415295215D8A81F1D0C425FB18EBD28985
+14AC1C04F90A75678C0EE655CE1C177A8A7DA934D540A937AD36CD8E4BBA9A22
+C0B326F2A0FB45FDE8699698C71A0F0CF8E706FF2FCF11E414FFD537CA9BE742
+6EE542D632281BF9E65979245A1CD1C81314503CFFFCE5CC5301C26C8A717690
+5715CE4EEB58DB1C8B7116A09E1B0A0A52965F7F8717B165BFD6E46E756B6A94
+C1C6ABCE25963F86E4072AA635B12AE7F8CF03660693D57EC2C0FA2848CDFAED
+9BB303C509C821A9DDD61638D5774DA099FF21705BD98202AB4EAF64D04B026C
+4B7C4FED74692BBFB1B0E0715FCFD6595F234576197EA5AD540C3A740CACC875
+6516803AE351DC24A959AF59AD131395ADEC5B3574409BC17FDCD33670EB51AF
+877B604CC79477314B7474E3AA7688ABED16EDF2FF23E703892CC38E6A70F39C
+C89991AC44CE8DEFAD05389AC283E88ABF4B5208A466026B590579EB82C5E1BB
+F0098FEAE629DED7BCE18CE4ED1A8A1688FD816DAC13FDB8B02C93A92FCE4853
+7756EED71562BB049E9AE6BBCD2EF810C4689F364FBBDFEDEA78B8413911D8AF
+D07453A557B5213E88351181AFAB9D7C261941BC453E4D093BCD55A943F78F63
+B978BBBD249BE329EF913B7F22AE73163BA5B522AA7BE94469F1DFB8BAB5F2FB
+661E0633ECD8E98EBFD50C5858CE32325C8585E132A1DD0126DD1FACDDFAD852
+DEC45103BDB24EBF4B46250437239A764CD859A594C61B703EED20BE12943FB7
+8737A5FCD09950C59DBBC769084E930910E58C20E3935FDAE919E3BE54504B22
+CE9BA2D3B951FE158AFE8509CD8D79180FA0BA941A6F717D50F31C1A70B88736
+4F20990B92B3F4FF04A879634BFE28716B0DD3CD27B1B386FEBB1184B82A3043
+03EB193651C6F2CCD313B7D05D480C98CFD6D70319B6ADD5CFB7491ADFE88228
+C5C3C9C3FFB75E5B14E872CEC13D5F9FBF0B166A4CF845BDD3259244C187380E
+0507DE6C80491CDC0559D46A3F847454E20C00520A5A577434DCEE6AEB13C10A
+4D125C4FAA6AA2E9BCEFAE47C4AAE03D62375AEF5BBD6BC37CE58DE8E40D56BF
+637EF318394B8AA64EF65FCEB1D75F16914FF20D9AF6D33AC7CFE5E03B452581
+AA0E455E1AD3180B4A66A602FA1C182225420DA1942920D6E4CDECE6ED0BFF66
+AA1CFEE0ED0484B7012ECBD3132634D5A247EE4D86FEF90C9E20D17B25B7FD8D
+032403966665A049087DAB904B45022EFAF02D74A11316FAF85530E4BEDE49A7
+C401AD8D2FDE45BF1D35A83D23C73BC1F1684204565838FAFF004E15D60EF3B4
+E7F3A0F1A6260A0C560F3014F3D0E249F404167076F8EF9D07BFB23294B2C58F
+2B6816A5CFAD43797649870061FDF949AA81C61692A463B9A89B266D66D11E76
+96B2DE3C315488759380674351E3F0BF2697E13EE9B9285FE7139C65A7B62D96
+2A95B661DAE73288C845C985F9C4EE95BCAE121E19251BD5389BFB002F8EFA9A
+BB08552EE1453C89EE000F784A3AE5C04518F05990E7A45EFB001A5BADFF75F6
+F4B8FD421FAD0F7C379D9C18EB4D6D0655B6C77A3AAF6EEF9C5E641466D36500
+A037845988D728799E234DB96D91B8A99A4F16B5B44DB2F09815F8651D0D7686
+A19550BEA1D0BD4113C225637AC526CD089BE1328FD6F5537DA1826590288397
+89778AB3CB3E09B26C896AC1D1C79AA4628D859B8DD2F2EDBCE1AE8307CFB044
+050DFBCED48794E1A854C6732D0513E73B9A345473497C34D7F68C1A1D1CB9DD
+0D24D2B9DBFAEA58081EC1AE3AF07A449F65B1DC63CE999BEE10A3A628D30269
+7B41B91B1411602990D33EE69690A5B96BA4C0E5BE09140102936B6E2D4DEF7C
+75148456B44E73C8C0EE120832F8F4FD8EEA798EBEF0614835D04E482CE8231A
+85E87D3898A6BF5E59E447FE6ECA8EED0E333C93E4B6751B8815F21B577074A1
+603301DE43AF19C02FEF2B4F8E13A29688C03AAD8CB34561A16EF0EF58B0C0BE
+9AB5CDCA5A55270487CD30268927E46E72FDE83778328A8F76DC70FDAC99EA73
+A4F8EE2C329AC505A9CB4DC0B0D3E8317E08028F85D88B208DC9CC50D6148D18
+66DF0E2296EEFAA59B54A6ABE1105FC655B03B8280F10C7115E9EDAE563D28D4
+649C9D80E6878CEE10AE4A415CC846EFF9B39EACA9C9CC8E6F399A5FDA3EDE3A
+33C0F65E7C3A8262552FC81B3231285EB0855B746938CE6C349D99D25FBF27B6
+5F16B62EF5BC23DF93B6D9E38E61697721F5508A43AD883ED0D13D8DECF207A7
+506D616A49FDA666A5A61C184B11E593F4333E9A759F78B4C79C200FE2F8CEFE
+DD6DB433BBB758D738C4812E2BE7E12B26732A173D689B337B3B9707E59ECCA9
+F4B58512420084AA1A390A1D111F5728447B2D4003F2776667F588E74F7D7239
+AA12926D11045CB76BD96942B379598DF33597EA008BE0C27F2C52946DFA3A90
+FFBACBB0851803588D4A707BB4C08302740BAFCD0AD6F3ED13A3C6261BC21C59
+72D7D3D555C9A4CC9D3B60912CA5BACBF9A546AC56A2F00F34BD46DA804029F3
+8D0D88A78485608D80A7B074E64EECFA832F109FA904239A4B04A36BB29AC1D6
+44BC70F0EB892FEEBFDDDAABB87EEB75E26F3CA26341AA5AC2DCE249C82CF576
+EFE7526D6704A85B19D88A4644D05AC360F03202B5385ECFB31D1954C5DA4797
+09B4EE3EC38E7D944D8673B4F8B9F67EEE6AD61862D7099FF4D1DBE2FD2AFB0E
+3857BFE3363E504604C62BA7D227D01600E8DD2C744F409E1D9C5081B2D01D77
+83EAE71291EBC1C2ED702806313F172B654AA908F0C231A396B1D7071B6977A4
+758F12D692E9D6112A2C3B1AED6C85FDC3CB47ED99D3033442D133FC614E211F
+92D2F59CAFA74022E6054E90833EE89034AD48290B4F54BC8C3484A0EE6A07FD
+D8D001D12584FAC896253D371AD4B42123E743BEBCF4D1A083FC028DB4F3FD43
+A6D8D897301A7AAFA5BF176C85A4612E94853E71653DD50F1BBBDA922B3223D0
+51B0D42F6BFB0C6114175A3E383916F88024BC6604C220407002DA8B83B9A0C2
+8BD56988778D37DA3590D140D6FC53D858393186D7F516775D5D77B4E97978F6
+A6EC32620A1F6996209FE35FDA8AC49854EDE226F7FE551D06F11339BA220EED
+88C74A1D0EA28D68A04E3277A66ACEC70DF469EB036B3B6EC4BCC08B15B0122D
+A6C4630F5F2D6D8CA859736CB6C78F55522B8C4637EFA470075ED09FBAACA840
+2936941321EA76C5C1DE42D429E72A7F7560F0F1BDC50B334C0EABE518D897D0
+0CE827733E84293FC39292251A4B326E36B1F41FD5F49337DFAF691260EDBC76
+A16A5DEE2BCAE3E8288FD7A29B7A82B1E3EA293C09942241A46893D75B92C78D
+524B54C0F648347CF4A90D699575423D8C60A10DB2BFD859A63B20939FC113B4
+89B0AA22D4C4BFC0DA272517598EEA63893B7B5763BB756CDE557B244E289EA7
+2E7CFA6345C7A9F0ED91501A521BC1A285427816BF6D85C67E32721D42E600DB
+D68C4717E493775BB724300CA8D51BE464AD19CC3670D98320BF0CA996AABD4B
+CBF65CB59621494AC555FAAF32B7D5F96347982EB9EEA7D46C6D86D25DA8A9B0
+292843D6C36D475347E0F35E7D939F18D2F78A8305D37A9D8B80F5063826055D
+B726E22A7041AAF0D54F52971C4E9446DC03930F36B48779EAAB96EB674618DC
+594DF73B2D3CBB11D53C46BE4644D41A76A16CBB9367BFC3A23CB73067151C49
+325FCD1FF9A8BDDB494460F5581187DE89B44BD58A984E782629B6A24B597DDE
+57332D07E77CBBA87BDE98F0F75EE200B27D79B2C1106FDF803F187C36E38172
+1C0D4211289E4A46A2CCF158352956C9466F44CD60BB91821A29A772B3E30A13
+68B091A2720AE0424E7E47DD0DC88C62B56449E2628F317D6DA25FD9142AE0ED
+5BB2EDAC229A222D0C72AE259AD51E141F42980CA6566458CCD337557A1B5A4A
+D25EB5EDA1140DF8C948FF17B1E6CB864729E373E9FFF18646724ED735F65DAB
+C08EACB9C6F7B2324CEA42EEB8018389B7C263A8918D1E1C625BC71977AE088D
+53D7C8CB9F320EC0BCCC8098132E1A24D47D3351FECF998225EAD73F9931166D
+285A2DB822D8FE1893A5498480D8935025DAEE753D4854681E5F370A85AE5201
+2455E530F15ABA553A6223343747D64A1639E46335A95B6F8369028CCB95F09B
+821AE07FF18265CA385E48AC538C508D97558C936269E8531A80E1FC15CAD109
+C4C87FFDEA1B2D9806E56BEC0221253C0674B3D973E4DF35B6FBC8A030F0986A
+7360896AE285F085B29750BAB44ED2E4024AB03763AC3F6879DA60D28DFF7C7E
+9129784233564E4E1051AA051A6BB57239D4B7E009C45E84EB374AEE01019B3D
+27D5DBE52294E551DA23B10A08E8A50D443E5A759D098D24002FA89416CEFE95
+A64E6D4F82443E20D9D13162554D700F3B90481A6447BA61F26460C62BF4C9FB
+58DA1F77DC9AAAF7666BC3294A6C8C59A71AC6D15328C8E45F30085837BEB7EB
+A59A2CFC04D18EF4B37D1F
+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
+/UniqueID 5000769 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 55 /seven put
+dup 56 /eight put
+dup 57 /nine 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 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
+E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE
+E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4
+0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61
+CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05
+43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624
+2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30
+712D165DB658FDA800798803C3CD32B841E159AF0F748400314FAF5038EAD574
+57D57A34CABDBE4B8D145E439A11585A0CEDB410973892F52DF26E116198F86D
+FD876B8299BCA27AEFEB72F9E8B4B7DA1110B52A0F96DE59A839E144184B72B6
+E45614991F03299BF5D1365EF2E0D68B86CF619AED2B9D37876A796997CBFEB6
+451B67B5EAE9120D0F8F9229332F23B6A10837AACB18CE42CA76F50FECE8A7D3
+3213106308756303E821161BBA3576A83820B337E6A7E804D8CA26E226068104
+0EB7484C4D980D7ABAF644B8B2A1BEC7E6506D965BA155349750E79A0C8A1AA6
+5AFC6F9D9C691B47F45AE17E66D1B273AA58D2CBDAC9820F011DD77CB2F40495
+540AE5327597D571CA7E202E2870297213BA4673BEA78368EBA8086EB422B6C8
+445F6B793CEA31BDC91FFADEF2C5BEC067188E38AF3B1ABD904F54F7E77DF9D8
+7432B67C8126BACF91EC2C8A38928BD202A705D5CC394BCC82DEE046D5855387
+DD7FB8D69D1A2E80683892803509179089FF144FCE4E00E7C13C4C7D3D627B0E
+1E7D613068F820C8A23B4D550C3BD121DF5D2C1607150B0262CA1B7D08DA1537
+9CA4B03E5C399F946E2FB76EEF27495805FD5CCE647F99CCDDAED06D52C1E955
+FFC68ED247AAAD68AE35417EF0D77A6F9CAA5CC56DCDB794B1483900B86EA847
+75CEE9DB09053E2AF69944F90FD82328DBA5352C6910EA63E527FD93F252DF45
+447C859A253AFCD6B91778CC869DF688739DDC41158501EA13E0FE677C3897A8
+6C1D7520AEE8F73B4596BBDE970E480B94D57A95A6391387B67362C8E1D9F6A0
+CF22109C32F2479521FF680239294067D72A965610AB4EA8C71548510BDFE6DD
+7C0573838933ACD4F8EA381249483DB508006370F758F60FB49A165E72AC94FD
+34937B613C21B5B7615F4E28BCFB5A96A7E7DC8AF6C1703C950F0762F2EF65D4
+37B34F80E46175BE7E6A1799FCFDB2F232E49C38831485C01A4CD7C46E4BB1CC
+367B9D403C6E8337EF4F3180120789D9670C294416792E36F2B7397413809F1E
+25F87F678B4ED4F653A7AB8CA36A8452B8D32ED929A6C51872BD2A924AFA5D44
+B00F2474868960A4F9EB4F5B50049F4DE12C6D0E0579F597BCB8E4283BC8F3FC
+B135F8C7304A781EEDDFB35C24FF176C5633236ABEDF5B9176AB59C3D4C2214F
+75A9AAF50C58FF68D2FA95615E0F3CE7A9E0EFADC909585C4B5CC78B45EB8C6F
+0632D9F1B86FA378A5BBAE2FC33D88037AFFBFDFA80B44E7B86A5F37EC4533FD
+9EEF65458A9C54F772956D324B3ECA2519B85B85681B6F217A96E50501D19CAD
+CA507B9A679CFCEF4227DB249191A6BD3C21AE6A5A30F5A5014C10B91A62BF40
+D106D9BE5620448B9C2FA636563C6587E0634A0E0FD55075AF6885180BF82EAD
+05E04A38194E0D5472E6367A988D105C089650C7F9F3C15AC9C05F449593B95D
+2AFA06692533D2035DB3844378E11F3DD903AA65DC063F5FEE2CA6B16D39C462
+31D3F660624B6AEA5BA879BE1D274E9F29F804AF8DD37570842F2EC862FB85A1
+4376360EB14CAAC1E6C79E33946ED3FDDEC420B2028FC7624A12A08C855BA5FB
+907F186135D65A1BA18313C486F2D1CB2FE7D6F8A4AC8C3FE8E0AE84A1E01EF8
+CC259575F2DF236A8A63851105A8C083FFB7C3590AA6CBAF8EDD3385DDB5809D
+316ABEF627C5B0B8E3AA5EC0E7CBBC8E85DB4CA591C82E9259806945D4107F20
+FB315895C1A9AE62A06C976C9545DAC334501EA44E728F8CBA5AD439252A9CF7
+A787E968E389CC6A467DA3674AF33620FDA12864C330DA6041C1439289D1998D
+E78CE23CFEFD93A4EA240046CBBFF414161780C465A1E00AD1E5A1219EB392F5
+B8D4A3BAF5AE68CC13FE2A90CE58257EF36A6C09522C0DBC48540DBD4594A7C5
+92A16688256631812098C4E247EE9FE0A3ECF9FC95498693071A272CC05EE821
+A5F51C180E59451126B5D3633EF6156BAE1B0E749045A1729A2D1AF02E03C84D
+4F9E175D228213BC72018E5F57F2E66B88DD55E5FF49A02BF23DF52B4D1138B9
+BD02A04181A17AB561E544AD48B974BFB92D1282C46EA08396D0F889138C4B9D
+DC679410DAE7C2A175B8CB51A1B5FDC812911396DF6CC23ABD9BE748FE2F54E0
+7A918D28DF47E23F0810528D212490263C1703C04E0AB63CBB3A16C6A5738885
+645ABF2DD3BEDF9CDC4363A73BA09AFAA771C6CE17ACD7CC1852E7F937AF1634
+6ADA07754242879BD71981310F02B9E6612966962CB70B72DBD16FDEAB417255
+6F2487609304DFC8C807D3C5A7A8A5042B94C73397E7801FC6CB13B54DC1A109
+B71601285D324B08B383EB11F9FA2436E0709F68D1D07ECB490E0D567083998B
+7600AB826DF0DB815EDD09AF241BACBF5AC86713F0DA981A42F5EB8AF84C08C7
+C8A8B137E3F062989D966FC43BAF50819199CA3063DCEC08454665BE8CA550C0
+1C96BDEC682CBE22A39FC9D59B4B3B349146BEA7D1D0EDD851A1CB1CC674E9EB
+8CD172EDBA1FD8AE11B55BF8C9561F09751685CEDBDE8E341A572602E3364940
+9FEE049B532AB726D4A7EF5E31FB755AA66DE2D36134FF1398FB4AE73C875D86
+9D800ADD21111558376FFB194B6212E96E6ABFAF8C223AB2643127775CE005A6
+24127715745F4C7AF770AA09276D389C308AF12E32DF5D4615E583C4DEF3BE04
+0E8E73C2EBFEEDACE5B8AA7331103E9D68288A8A324A79BF632B4248BFC629EB
+763609A0E4074B934EE379AC89EE96FAC7DB3F8827E7E5D6E30BA2DCEC91C244
+71237F140421392DC9A4B9E9F44CA91AD3DD30A3564A40B056C2C55DF19D1565
+BE2104403BDAFF542BACB2C5D6B296AAB227C884E5F573049D5179D9D48044C3
+B68519FAFF2709FB5CA020A1FBFEF37E94C7A874BB51071DC716876456EF5E77
+C3FDF78F5FC65A60D624E9076249B928FFCD329C42EAA5C1306E1FB17FAC8150
+D26C39A6AED66246F7548051E514F745F97E255F224E617AFB7DEE1B23F946B2
+21D731C3A3E59E0F37F3ECC5D6D4EB7EB4F2E0B37D51F33806C9912C618457B0
+892CFFE17CB92AFCF8BA6C7E40651521F6CE655D60768B17FECFA7C2E7C85EFE
+A344107A5BFA57214C98F2AD835E09CA56960697DDB0290CED5B714800FA44D1
+1C55CE785A1FD1AD004E8472224F16BEA452F24EB5DCDCFAAC0EE62C86B4685E
+06FB0E70D85406B03E3730F12C2388A7D5DE66F6468973EEC6290B7AE4CE9F5E
+8F241F477E5CF206247E26B88A2FF524ABC8EFD6A8F741AE0EC211F066FA99C8
+D6192BD7AE7EA22B4BA463E5DB7768BC68134B443734A981C12278F6F6C9DCBD
+0360361BB3E7910C2EBA0A7FB44DD296F444474F0E755CBA932358FBB40FE9DA
+B348AED35911FA0D1B348506C4806B07D0B540FA1801FA9D7B3E4801A9DF74F7
+F541DE1E4BE2091063983B2B72AD7736C3EBD3533DF73158E20F5431B73F6A57
+163FBA2D4A73B79B3BC67EA8B45304C9F67679D26D08012F9DA8FD88029B4FFA
+FB2F6158B2B9E1513E29C2BEE24E0E784B0F5635B2E10FBC57D32EE05B099983
+679BE77B74CD5E9BC39E1D9C8ACB3BFFA0E114144AF09AEB0D0968038408221B
+DE4121B5489E78C7AD625D379D9625A94AF806B151B24551FF458298DD345210
+421E457AE16A42378D9302EEDA4D1042BE0DB08B91883916BBCFAA3672330FC8
+CDFA1B660D10C12192019D6639967C331DF25CA17A4783A852050402643ED4EB
+875EB807EAAF59989283ED79DA19BC6D2D2E2C6F004C7FC38437EF5B88FDC78D
+B86E97EAE2B5D828FD49EE099A63313D2AD695E25CE251C9ADC80B0B20ADB59C
+68748E718F0DA4799A4C8F534B9A656E9068BA6618C9ED001F26627B2F74B22D
+4D87AE8534C6A08BB4FB0CDEA716F97F17A971E449699CD1D9B9B6C3FCAC069A
+2B33F8D5C294E007AC106EF31DC3817CCE8F4DEA1E9B465FD8B3BF38B7FADB42
+37E7DE6E8E9AD3905A4CEA4120191F94EB29D4BDAA1E51F685E87819E12705F3
+570CC803BFD294EC09CD2B0DFF1E6C4C318C203AE622F6F83FE19EE73ABAFCD2
+854B0FA848529496BADACD96A5F9ED83EF9FCCFEEB6EECD9F597C0ABB2B71C54
+78445477CAEE595E9CEAEC4819C274334AA23F251E1FE5AAD1F6A1BFD0B3BBF8
+4BFF6CCE097D40C1824FBD519862D6A9F4E381791F0B0776E672334854537CCF
+C9EB29D007C04D9788C0E3CB56647CDECC231B88A3C8AA2ED1BF3C7585CD8D4B
+281EC83141EA84BB0779D7408F8E7260E6BD6EF1787A8E5FD2143368984CCA41
+4617BB53C9A2D3F52E9F41B8C4707142FFCEEDC58A7B780D1DEA95DCD23FD2CB
+F18303F91CEE83F90F0B596219E831C3CB83008AA4FB0819CE419BDA8FC06EF8
+98E3DC556E5273A524F02302D73D103EDE979FA8B103333CF0522DBA12217BA3
+F3BDE1D080310682B0C926FEDD06CBEF863323F54A5E8438C9157443D9B66C7D
+038BD6B290C2F3E584B111B80036AD32A3B1E974553DC3B93B264F2657B0CB08
+67BD84FE3400A1692C3037189EAEFA20B3A71A08335BD3B94D03274CA19554B8
+EF0BB9505FF1E1DCA8522AAA7B6A9B2B07156A678FBBBD2D01E92270B828ECC2
+3FEFBDB0DEA139D53950F8D8FC9BE6A2B142E1C2AF2AF1313342C720BC8FB4BD
+7C146DA1E49F52E8EAA66822AC80B419CAB591E35E8F1489E4CD2520842DDD2E
+0010687E9F558A683A6A099E4F215188F49077A4573892BDE47950F572053274
+D859482A5229ADC02C3CA8B0E85066367ED7905B82B8854BBEFBB5A2F11F5D9A
+DB96D02383C8E0BFEA6601DD7C298A6D368735566C3964F11B667435A6E4F812
+4548331FF79C1EA72D1587DCF619E97857E6B0EBBAFD6AA6CC81F3F4D01D2F33
+E5E1E542319D7ACCC66473386C590354C768DC90B29160CF0C872BE98039C21B
+E74F67C77156B79E94810C51BA5C156C902FAE296854CF7EEE8E6FCE09658F50
+81134D6609CFC91BE02881B521208DC63DC2871D9B9D160BF132EDDE9B3DDE18
+C055A02E9770E10A3AB509262F818A49C935E90D35CAFC14810C9D7444BFE252
+21622C36AB249E6804527ED375D91C7D963E25145EC200DAACCA07ADA55230FE
+94F558DDE1834D09B820A63ACF44EB5B243DC95489B41EE2B0904E18D81588D1
+0EA8C4A62360CFF40221F7F39E5B8AB91357D08C91C7860587872252CD892EA9
+CE466BE553C30CFDE824B277DEB9489EA5F2EDEA38476A1F266990427E11A9EE
+F991F3A8F6D8A930A34F39A43AE90D929F2EF5B6C739C5AC41892FF624A24D57
+C0F73460FAD1EA7E6BAE71181475DF8C06D1BF59B0CF3F3BDF1684F2D7EA0C8C
+361714C362A84AA52DA79CDA9FB47F5627349FE0E1073BD5128C1D0A125CD8DE
+4C715AE818D615ADE2E24A148E1986A11E54A9536C833DF732AB96A08248F9EE
+570468AF4AB80BE4ED88301FF8C05ABE381A4456FCDF067A30CA0F6876F9255E
+93E5131A24047DCCF9BB4E29B7F1374BDFF1A977BB9C65BF7A6E28F8031FBFAA
+FCF0DC2A74FFFE1231B493A80D56EA8BDAB9D1D2B2EA8CDA050A48F8575D7A15
+E3D65D0E3F9E07539C801FF321016FC74EE1FF2D502A6A8C04AB2BB7FDD736B9
+C728AAC3AACAFDDA77F72BF1B51AB6A87625E559AF04E84FE634EAB7C594FC00
+1DBECAFFBBA254B7190D90E9FBCF77F3F04F6BE1FB8B9F6761D86006D24B01EF
+E93A50706885EDA89C11FFA44F2664004AFD3AFD6205F86FADD3A9F335C10D2B
+BFD9C6FFFADC863A859F3BE20DAEA6A2F61CF722FC6189F72C64B8FE0D9D8894
+6F641EC3811070B2170C91C0E545256152431B342011FF2FA610476228E17168
+127D87F62F284F4D6D4679D3D6757C87B8CBF0F16540C350583B582B1143C047
+A047AFE33D456ED02CB851FAC1C7DFECB4A87563AB3FB77873A6F88FC4A0DC6D
+2AFDA0616E54FA72A9C50DE28808BB19CEDFF2F8F46DAF5D4E81360BE74BD520
+13A41D53CBCF36852417DCF430162232D3F58E202D6207580CBDFA85FD09ED69
+EB0BBCB130CF7F5212E72804FE08F73BEECEBB59D009544D98A0BFDB72CF3EA8
+CE0D8454E701F58981B62CE990432FCF7758F5725A051539C94A6F03595143C6
+FD06885FBC113D910D256F65A48C2853837D04D3D49F5F31B01A01C219D280BF
+0991D8C27450346F7BC2169D49EFA0BC0AD08373FB956715FB1C525676E0E03B
+54FCB22A0D4873D0D0EE34A7072A719A68A0259875FCC40AF6400AEFCE6A42C8
+36C7E6CBAA74C5DCE043F5F9BFE66EFF1EA5BAE3EB2C84806E7A8377AD24B14E
+AFC9925B8C5890EE075697B9150779F8E2255E714F3EB7E487B666EE3CAA5FF7
+F56751F1B4FE7740E358F20D561E33D62AA4961552AA99BD16356850571D65CF
+2F2876BAE66989F504C57E05BD4D2091D9026741C00E278596EE3038C1179ED9
+1BC29E6EE9EFD767D68214B348BA511DF3CF5C2645F945EB8DE2DC44F9BF3D0F
+A2B31023EB2C9ED54E2577A695B45F4835CCC81B29C4B51C3C022BBBE452553C
+73D78FD72803AEBCB8C86C2C2C17423A7E02FD3CF21952A75B5C280DD99F7FF3
+BFE04B17225B6273AF9F0010FB6EAF1BA218515554A2890F433FE0B6CEA4247F
+F3ADC49FE91A6EA715853984912051831AD3400E400B45A5547149D79321C518
+B7716E2F1A6C99BF568E10F1A55C52F6AA12296CEEB44474C6D95D87C746FCF4
+B83264B4305375744F1473FF53805696079585AB2ACCE51092BF2DBA4B698007
+DB4E2D15C012C9A5D376FD3EBF80BA247888465144B7A1BAE3C46754241E0F80
+83E384D92DA9B3C624F878694FF2266186F90EA70A057EF78DB92D67656AC58E
+7F907652B58D1A4AB7F635B2AE5DD37C0D88A7468A1C0573F8F4BE33160EDC86
+E58AB188E1A703A28C9E7DB610E902535060E4CBFEEF2F89ADFC845D1B428F06
+98672E3D08E7DC2E6B8F3F159143562ECEAFE8FEC3F1E7F2CAFEA6C7F903F52D
+C2AF1F3AD07FDE6E199EC5441B8FF1518BF82EDA4CDE960C4DEA0224AB60BACD
+0801DB7242BEFC3A332C2AD07A472B61E0EB4E460D817FC6830197430B26806A
+AFE0D58C8249BCDB034D3AAA9D38E5764827AE41F551EB8D6A86B05E7C51D41E
+276C9657836C08E55755740D498E435362BAA9B11240981D9E054F9A2AA100AD
+538169AC7C0D1545C7179AE1C124A0B0918FD7FA9ADB48BB1B97E495D3FBFF2A
+604579CE36743DF8ACB4695165737BCAD01CF6F0744E683F88050A9C61CA9944
+902B6FDC64B68266D798752CF7FA818E3B46E2AAC49B9A44090108FA2E7C7FC4
+725F80BBBF123BD080594394AE4FD6DBDB162773536CBEA185D1DE567B9B3BE4
+820CE45BFDB4CE0192DAE06B23CE8A27000812B5F58FFFE1700AABCEB2FF420B
+983DBE63CF57CD928AF149DC7C731277F74868FA71A6C804CEA0F2C2D567E65A
+8342E488C16A0F2B752AA7BBE25DEDFBBD8CC9F92CB65B3193DA7606B10FBA15
+C3A873AEEF06609B709F2B45FDDCEE9EE23F955E75EA3D6CA9D39A367BA31B51
+2B4045D627A0ACAC57F07E73F834E3F490333FA0BE5CD1CD2BEA8068D4582455
+D0D94717AFBA19A6BE19389553FEA6712BBD7A10DF3B454A3433676FCB1675C8
+C1CCD24DEF916A8F2DC6A43DBCD881C62DB5A342A9255B931CD5720C348B3539
+558236857EFC5FFD207FF9CA9B0086D299FEE3CC13E918376F43A83FD44507B0
+CFE346AC4335642556B84F6D7BF1AFEA7327E9FCE49D959B229C0F37787198A9
+C53D432C5374AE219CF4BF69031A808D1FC3AAAE3790D80BAC317B1161120BDA
+5C9AB72B6BF5C3D7B1B054DB53E3A71A055663D42AFAAE968CB01F228EDB3125
+17920605C1C7E735A3ACCB6B405867F6571408736D67CCED7CF55036443328CB
+E45587FBD8AB63F18504D711B97710C2C11AD26914404FAA3FF4D1FAD99F5C06
+934E637D0205AC47DB61EBC1E8009CD84B792A92EEA306726DAC94FD66A4EC3A
+B4643518E94C5B5291724373050D45A88106A452B40771DD53CFFDED5C7DFC24
+0EE87FB752046FD93DD2D07530684BC04C6226F0A32D12EC3B15060C5594DDD2
+BD215B0EF6B0D2C658C9BE79F4999114CBA20E94A4F79FFA09E05DAF23D4AD48
+B8D9FDEAA08C189DE27DC2F90FD6A14C95EE42ABD2A1FE0E8B51E9B59E987A95
+82530AC826399D289A07C4660E4C1957EA4017FB0061CBB956E0D5CB27203315
+306C39002F20F2E27ED0750B6D8FD3CA57B87703335C9F65A5F5E83BCCA6213C
+BEE053515E87D67D2563E92B23A1BF1FAE3F4AAB2239F5D0E65207555A9F99B5
+F9BAA15AF16D1E01E8A39345DE370FD5E5F6EC87FA6BFA15D139EC6DCE525E71
+C646C83E8888836BF445AA15CD799ACE0783D4E2081A1E0C6A226CAF03DE31CE
+D45486903056C2C156440822949CFE468A53D7FB4CBD5AA7790E1001DAA53FF7
+DF6B600882F5976F95A984D5E33F1F78E83F9121E944FB22E5AB00181A3C3E4D
+425419E0B7399145BADB34CE1712579D1C13A97CBFCB9F7265A5DD3726BFB5E5
+4622C1B0D14575B8AB95340DF08C872CCC7C6EB0CCD8C984659774C47F7896FD
+3AC4EE79DED83143E77F6A50EF869EC9461FD99DD568757410E01A98BC8E991D
+CFD618AB8E077BCCD2AB95D48E4A4A6CDB3A47DB6CB41A081E1A6625BC5E941C
+EFABA366AF71F4E546259657E3B88B381BE2F085B5C7AE0B29EB08699C2707FC
+3A7539D55B3F125758D7DC5D23804CA297ABC4F9DB4AB5F2B055D1083D382697
+09D89678C2DE3C499350EB7D98412D39F23C8E102254B26DFA745466DD09F163
+61CD8DA6EBD08346D2F3E465E511B670DBB3DDB49A080B2256A044EFEE804E31
+EC370C337B97A7FC6FA775E1B8EABAAE1DC88BE3F6DF9B337A1F6BE37AE6A3A8
+DD1E93F98C31A87B07535507B4504D4D5E7EC11C5D35A2D188252A31A42ECB71
+B2306D2B0E04672A699CD8A14DDABCE2AAD1CAFDB00DAC117662D3E83EBE6A92
+81E5F66B857C979D6E9852C179D3C217A561B6E0020414BAA7EFE5532B92B2CF
+2525135A80810A144DFF21B4C22EC397E6D594A42D4B81EEDB328D18C85F02C6
+0E4B23048A1EF76779C03E34C3BE28E8F30F49C743CB039237EF19DEC1ED46D4
+47955C4662A5693C95962D6AC423A15BBA189E730A3E63869EB04D4B1C2FBAF2
+401C05F5D36E44A67A61AF4A9796E049F4C52E33B28348B00F90827020741033
+8DB1E955126ECB6337E588DAF0A4A52E22ED0E6D814D252CA68A50AEF83CADE2
+B801B94A2756D2F64E0E0F67DBCFF936674DEE3EF685848FA48F75C533325C2E
+33C0FF9829004F8164D33D96EC2DC348618B1089E4A2D743EF6147B28854D87B
+1F52B53B368E30D3464D748EAA82E89EDED8204C2E735EBF1E9189EA3A818CB2
+FAC148418A6F68F5E70A31B0DF0A6DE06AF51AC55C46C04CCE2AE76A0BE2341A
+27B4CC03748210D49F26A68F9F910B87C70E344514A1DD7684BC035613773B70
+503C066FB4C9AED2E7EE33CB2B5A154EBD88D38D229210BB7ACE6A0DD4E0297E
+6C76F5308AB2026DFE51B58E45F428315ACEC47E476B6F3973085F6F3D98BD57
+F0D9CF0E888BA7109CB8D28C1D01076802F7D0503FD5F0397F7EF50DED0BCD0D
+8E2D100D45CBD9100C5BC07FA0F0A712643D95648EBF0785D844669A3493E1F9
+2987A5317112B29692D169A1230981AE7DCE4FD51524667DC9CD0710D2696E63
+21F1A2E86CD1994FFD6DC2242E1C4B73184BBB83119920F54C80197B9192FB88
+58BEFCDA7E28AF06C6888F42E9421B1002839D8F1118A5610722BC86CD3DA03C
+057A6A018FA0E6B2E40F916923BC26149E85FB02B2980E692510BA06C795E514
+82CD20D9DF51541A918A4D4D40C21D764352DF81E490132925DC2F0F58566575
+7B7947DAF078666DCB6E47A75BD1F76C16172C6A9C4F13FC418E5E90D3D0ACE4
+150EFF2765F686530681D7BA5AAC2B3203BDE872794675CEE86DD80EBADF64BF
+2CE67AD590D4BB25636EB6D139AFDEF00C2EC375867C4E3F2E64EAD5ABD36C3F
+1D8537780EC9A463DD8CF2BCADD289BC9CC8CF1CCCA3815E413F3CD452C3F54C
+FDC7E9041F3C519E8366721938D05BA2BB617DCF3134EDEF634B93EDDAD30B14
+7B46A8549CA3E8122D1C803816074B22D6B76A3594C1E2198DF1DEA4DD6FE9F2
+33E5C5823FC78AB5DA749A0FF5EEB6EAB7B3662FA104C7247277252489FB2971
+A89A32B895A2ABC80BC255BF8F2D13B2E28A76C7D1C2C13C4912A63D6C22D690
+BE6BAB54DFBFA16D73BEA8CD51275B7F9A22185AFE75A2E4FD590BFDD0AC1659
+450BACE1F60CA7794A0629B52D2B1D6C629B526B33E550B1518D9096705C88DF
+D5A98DB45FE6786F4ABC6DF6D80A0612D3D77A99014DFD3B86C85F5445471D45
+EC5604F4A12F55BFD6ED657697AD27C4727DBBFECADF28911E36E98BC2AA49B5
+AC489BFB4A155B8CF909A26EAFDAAFA99AEB41A6B293E9FFE908A6B54B824235
+51F2B0BA5713BD455F1C61F1103BB422A836A34013D1B7288CE96FEA9E8F5A7B
+90BBABF5F6F82C29D118367B0A98BB8F77D161F683B4BD3E4C59AA628B3CEDD7
+6DA6BFF770B6D105EE710FE901840CAA36C3AF4C716666BA4A5EB962D0A13F47
+ECC5D81AF71306CAB9D6E9A77F9C0F68B0AB47D50319C8E365E79D9C4E1F7D57
+5302F972603193276CE5A66C6824B1850716AE61D66B3CEF572C943105262462
+707AFCDE13967A45B574790D72D8706EFD2C64A6771399B1CD3FCE1D646144FA
+4A5282A581C0A56DA8CB301B89942ED89E2FC975E5B53B920F1079C0918DBE24
+4A7282EE3BC6D4B5C3ADF688532766F15EA65D084E7A0248647D3C665829AB6E
+211DA647D2E06035CCC8F10BA8950DAD745F37AF1C5625BEC1D3917844945C46
+F5099F037C745EDC43AD929F8E5905352B215C405FDF6F58BAC434E418356A6C
+85F4847FAE5154A320D2FC5D016FFD2005F8474BCF21B7A461462F841C697CB0
+C99ED6C2D5A504EEFEC31A0A2B9B442717AD7840D57245D7C2AA3408EDBB22EE
+A20DE07EC5167440E5F1FE2C5B7B1381276508CCAC28984A57D0192458D0190C
+9817A2FEEF36DCD2784E66C0F6AE36E1580F43F9FA41A57D3E047E20ECBC7F5F
+C15CFFCC1D83681BF294CE0494760316DB15FC1BE1F35B8D1D91F97273A26783
+1A8C38074B2B65E8BC19F0FAE5D428D3FDB15075E1A64ECAC95AC9075378379D
+EA077B2EE0CE3F9EDC290416C899961ED259F7DEE209C8753719EC07F64AF8B4
+FB2CB78D0FF3280C0415DE211F112871B5799A9E0A03E5A6597C5BC6DE5984CF
+63A539AF45514B4A69548E17A737695D9BBD494C9B13F1E51DD01F251B4BD03A
+F3D3A6480F86730A7ABF96C53A891DB6AE7325A93D726F1D5EBBCCAFEA869D83
+3EEAA99D78E6CA5BC3E1F2CD31E427EEBC36AF297FB9813422560A552A0622D0
+1266F47040D44D4480E896693BDD817EDFF1424798A37879A65DD2F8F565F945
+60B131D2C5668B8BB054BD5DB0FB9CBCD681EDED36A6946AC6BC3DB3A58097BD
+127E03F24CA4B02C0210B859C0ADD6EB1F0ABECA278A0AF0C80B21133A443AEC
+6650A0612C3F8D8637843B34DE122D764147B0582E6AC207F4027EC85A5770A2
+6A019F8E2598B079F8C540505DFA9ED21C0479010DCB7C3861D05349E0207433
+74CE794CC454C490B6DFACD93418BD60835493825900C52E1A15A6FF2745982F
+43FFA53DCEA3C34C2325861CC7FD1135EC1BCC4231F74E38A9AE499840F0B940
+D3F8CE7C3240BE9AD003F271A9E25CDBDE274DD752BA616B82BBDBE5DF165616
+8962935942FDC50A7D069A214C133DC868D94B2F419434F438A853752DB8E46B
+6D96829F0F908FB959BD956BEB849094D87372CAC671651073B4D2466AFB320C
+E4A80E91029C012D800F6C52F102A9B68FA68E89CE343816D6519317A5D605AC
+C8BF3A4CCD4CA30D8CAAAE040459A44375879F9859C5727F1B08BEFD4D2659C0
+E20DDDA8604E974777934108959C20E1788347A187C5E5E6CF573AF247B8FB31
+E7718BE7511AEB1F99A47AE92FC3BA326FC8A7005CD0635419BBEF99B2576BAB
+21FB6ECFA471B99553BCE506DD6C68B9EA4A9994B929B36839C0FB61AEA31BF2
+E294ADA6504C8D98DC5CBE49753D409905E12ED90561BFB2127059E6ACBFBAC0
+FB7147AF2F955319295CBE4B25FE2787A4687B7DBC33B2EA3A7034BD9324562F
+ECD1747C47EAAEF5E18CF0E7F03603ED9D17E1A98C6D2AA1EE1BCE27FA03F9DD
+A9042AFDB0716C17ABBF1728A660A3296EE1093B58B8F8988CC0D4903A63971B
+073CE28A48A2897CF21EC545B436108C9E1E11B45C48D504DC7CE9B8DE5E7B93
+CDD1AD1C983B49BC1CA4F03F95EE3AA958EC53851F34A42066EB8F7AE83B2E31
+D4FC451CF69D6CE7E7222C28329A72A3C1D7134224B21EBD45EBFFBD8F52ACC8
+99917A16AB20AEC756A3102A7B0762B4A5B0FCEA432A8FD9114AB4C4990AE368
+F691F33D882E62A952F1C2DA8D5412403A24003C846A07D1CB1C9B36E331509D
+896CDC7B46B3BB7EFA1BF59E685A9D0CF2EEA1A160379A856D431F166462E628
+445EA2E307610478436B4BDEC40B153B2E3747483EEC5C40F8AC007D77C83672
+C0774F505B9E56249FE63655F90DA7D97AEBECC6FBC35A0C46BA84FCE26C6AC7
+85F90FD6608F9580D22C3199E1824E742F84FB562F4F631CDAB870E3980B82A0
+C075376C45277F062209E86CBA75670E55B75EDB71998680B17023423EA71E09
+21AFAE2CC514450C02BA35B37D43DD01513036FC69B77081B5F83B7A260A3370
+287150D3FA8A7BC1984F38935E0EDD89065E0675E58BD78261826F167A958904
+D3E2C0A9C77F8E7BB906D2C277DCB3718F62AE6FE12DD1DC46135322E6E45CC6
+2D5EAAF2B50BAC5EBA0B507EE3A624E4A13C2A82EB683C64AFBF5B6C8D73FB3B
+A730B09BCEA6EA6B4B1300CB7D48C0D42FF3CEA5065FBEF5F3CB8E578E28DC52
+C73EB4CE3CF8FBB016C06C5E2955CA0578CAF07E629050B3089E5073B769CE4B
+6BB9CB1D7D8A8B641DA884B5881AAE0084589CD3ED9AF4762FA53951EED45E08
+05E8A3A5712124C069AF1363F585B78D9A5BB1AD27CA275E015E3CF6D76BDA57
+BEA3F3697A6F6A38AE854DBDB26DD8D70C417CAA36BFC301BA762A8CB9CC221C
+82A4919BAC935E5C76CFD1DB5B404AC3D05BB2D1F4A66493B5349A8E56D79927
+1473EE015793E8AB0DF5B2D72B8089F0C3B59749CAE951A9A928DA69A73D1514
+ADA82941302F8F3E6B49B2B76D807741BE3102FF30F07229438069DFBA4CA2AE
+F33DDEA2A5
+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
+/UniqueID 5087385 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
+/UniqueID 5087386 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
+/UniqueID 5096651 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
+/UniqueID 5000833 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 64 /at put
+dup 98 /b put
+dup 103 /g put
+dup 108 /l put
+dup 110 /n put
+dup 111 /o 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
+6E7295A254FEFC41A669A86933F8B05B9236B04C3C0C757CA37AFCBF3B888AD4
+FCDAF76C5BC7146FF489945B49B165AA4F1EB30A0BCC5204FCB890C33C4479CA
+AA39D1CFDD9459D56F730032CA1AA6A18C8B8F25C5055528F5CD94F9704FF7EB
+628440A3633E5DDCA0671259786255A4DC7DD81BCB762D4B3E019F687663ADA3
+76805EF1BABEFCCE98A39170E6126A9E40C7E09C8972B082F153A352996B855D
+20608020D3F60504728E54D29BB2245B612550E9EAE5562B7D270E5056238474
+4A40016091F914064DA7DF6B59BA90DA8EC4D2120A75F87B5878F842FE00769C
+B57F85C9720E7A8C2D0E8B3BB3E8C7295B775ED958D613D8F62C1D62F3B146C4
+9048FBB3470A712726EC949E2BF5C1B998BF51D824761911915BDD95C9FA31A4
+388E3F9717F68C918826AB9A718240F6119AADAA47CA3DA3696045A095671A46
+A4D8C4AD6297CC276BF25A28073B2D080D179984D80E6089849F6EBDCE08953B
+3C55669083D926346D95736EEE55BF474ABFD509A44C7FDB5C1E5DE8D595A7F8
+5B2B23EF60A1248C9F3FD5B9156A508FECE43347526D8EF8757280D12B4005D7
+FF8741FC01FA831D3DC3E61F7BE17A68CF11347FFDD4AA907F15D2F88BC188EE
+03950F8290AC2E6E0EEEA1072D8149D4FD061AD1DADCAC746C415EF94CF483BD
+266133123C5BBD7CDBB243090FB70F85E9A8568474F8FC7529E3245ED81447B0
+82133CC65FAD251E7F68B1454E91552C6098791A5CCE50A5C5A6B9567A93C131
+B575843F52F1806B4F7929AEBB42372F0D153E2EEE33FAE0717B7C296F2E934F
+E7A6C7446CF51D487C7A71DCABA1C667AD86F4E45158FD029922164DC9A9827D
+160E15412CE58D26D86EB063500CBF4E25B767EF89A59F0644CF2219ABE68FBB
+C4FDB90AE342265C836ED60C1883D0B3967891C9B79ABEB821926B3C47757497
+F6A48684D5CD060270FF64A9A3C4ABAC5FCC80178F95410BDAF9FB25B1E6CFE4
+755582FA0C8E70DF63208C5E595579605CD2DF1E00068EF247895DF5CE165A69
+4FFBF8274DDBC3FA678FC82A4F77B588B498662CD8BB761662D61E3990D61DC9
+50E70BFF6F46C65D6FAD3C0E6A201CECF0D130FE9D6139514584C72D800E4C15
+295FDF32A1CB5EADC8A61EDFF25BC19CCAB198AEBDE9AE8003D2C528A08C6284
+918A39238AD5F269A110B73725AAA09E0EFE6CA8B9C0F04BF2566C38728DEE7F
+B611D8F3D8D3B27EE4271CE07BAD0F993C5BF4FA4CC4E28699AFAE5698254CB7
+9842A197991A4E1D8FBA2F6CF08194BDB5EE71303811E91C6FB12F7227DB7517
+02FF8E7D4EE091ABA4C3CC7D3E89CEA5A1C3BD6C2D7B3D138F2DC4BE4E7EDE36
+4C703AB1B273D81F9C40A7E3CA205C42063F983CA1C3DE22C85180A8247534AF
+0C976D4B024011F9D77BD3572B96F9AF69E2DEC56637C3CC3BF6CE87281E269E
+93A4945EC7958C9D6A05E019F882C9E3A519ADEC993319255C01911EC25A267A
+2956EA7CE5F3AF7D2E7318E9F5F3C975FF818253E68D3ADB53CD25505C0FC9E6
+67049080F258537276C10B7A2B4DB03B63CAC618B416FF311B71F9E77C9D01E4
+A5CFA3D878845D707856476E52F77867F8938467D64F901EC318AE3EBC913D92
+2E8D288348BEB1745AE0403CCB5BD371F2E48C48718BC281CDC20D00D6FD2D65
+E44A66424BE76821D0AD8C09AE8E915E62F5FE65BD95C7AD675F9881F4646361
+A407BA5369EFE20FBF2214009F4E8C8BD874F4047798852CA6EC4FF140AC2CB2
+685F3E17043239E8A9B0357D2B297BA05AD504D49C39D900C683BFE63BFC86B4
+93596E5C8A3A164F9E185AFB576B9FFA42055A7ACDAF5C195B9435D34F8764BD
+07D275CF289A2BF0D787054F61D1941F92BB2120C3EDE2A8332667A321F0F03C
+CAAB80075296775E365A3C3B8C31F06C1013D2A15BA1500E55B1F9D288B2B1FC
+A41243B12D72B52B2596B59A95EBEA07EBA1D94FD264E4AC3AF98C70B615EAE5
+2D39ED41E3ECCE42072E51918CF44044C4CA000E7C2426EE8CB7FDA88CC4D268
+3A99F69A24F1989C9DAD387900667746258F5F26576BBAB626ADAB225D7987E0
+53C301EBBA6599DB6A9E6DBA65467902E37750CA0C5905B55A21156D4F376D99
+D0C78F3D5FFEB3173B16B8F68B7AF47ED65CD53A7549580AACDB2196CC9EB1A8
+0838DFDCAA5563DF977891EC83A386325CB573AE5E463E8D93B3D0EBF45802AC
+B8AD63121CDC7C7AEA88F0F0D0D420C11E1B5A22948B4F686224ACBF002C8D94
+8C9E8BBA2F807284B8774D1B87CA85215008739274B8D86D3C5C9724DF56DDDC
+C354419B32E48A184608615B33DCD3E9D1C578FCB04617DEEB729A55286AC65B
+64323684D96D653526593D79DA1E0E5F6506EDE3F33B8D23437A5619830993A6
+1664C565975305B0B1798BC66143CCEADD0A729DD3DB728B36DE232A7F64BD5C
+4B689C715C85C7C14EDC65281F2BD1239C47FA6B9F83E88541CA185390B6B6FD
+C7895ED214203FD668500034C84691A328024701EDAEE37EDCF3ACAD07DA228D
+AF9FF93A557F8425A58E3C9B06C8F8120CE758DF2D4506F2
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont 
+TeXDict begin 39158280 55380996 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 7[58 3[58 55 43 2[52 1[58 70 48 3[58 60 50 52
+59 55 1[58 7[38 38 38 38 38 38 38 38 38 2[21 1[21 31[43
+12[{}47 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
+1[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[{}51 74.7198 /CMTT9 rf /Fe
+167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60
+67[{}13 83.022 /CMR10 rf /Ff 140[42 9[27 5[54 1[56 97[{}4
+90.9091 /CMCSC10 rf /Fg 133[40 48 2[48 51 35 36 39 1[51
+45 51 76 25 2[25 51 45 28 42 51 40 1[44 7[69 3[70 63
+51 69 68 1[68 71 86 55 1[47 36 71 71 57 60 70 66 65 69
+6[25 58[{}41 90.9091 /CMB10 rf /Fh 133[52 52 2[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[{}28 99.6264 /CMSLTT10
+rf /Fi 133[40 48 2[48 51 35 36 36 48 51 45 51 76 25 1[28
+25 51 45 28 40 51 40 51 45 7[68 2[68 1[66 51 67 1[62
+1[68 1[57 2[33 2[59 62 69 66 1[68 15[45 4[25 1[45 29[51
+12[{}41 90.9091 /CMSL10 rf /Fj 214[35 35 40[{}2 90.9091
+/CMSS10 rf /Fk 134[52 52 52 52 52 52 52 52 1[52 52 52
+52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 5[52 4[52
+52 2[52 1[52 8[52 1[52 1[52 14[52 52 6[52 42[{}35 99.6264
+/CMTT10 rf /Fl 134[65 65 89 65 68 48 48 50 1[68 61 68
+102 34 65 1[34 68 61 37 56 68 55 68 60 27[81 18[61 61
+36[68 12[{}27 109.091 /CMBX12 rf /Fm 130[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 1[48 1[48 48 48 48 48 48 1[48 48 48
+48 48 48 48 48 48 48 48 1[48 48 1[48 48 48 48 48 48 48
+2[48 48 48 48 48 5[48 48 48 48 1[48 48 48 48 48 1[48
+48 5[48 34[{}71 90.9091 /CMTT10 rf /Fn 197[25 58[{}1
+90.9091 /CMMI10 rf /Fo 197[33 58[{}1 119.552 /CMMI12
+rf /Fp 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 /Fq 240[45 1[91 13[{}2 90.9091 /CMSY10 rf /Fr 138[62
+62 62 62 2[62 62 1[62 4[62 4[62 33[62 17[62 62 45[{}12
+119.552 /CMTT12 rf /Fs 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 67 67 67 1[67 67 67 67 67 2[37 4[52 52 27[75
+12[{}53 119.552 /CMBX12 rf /Ft 131[91 45 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[{}86 90.9091
+/CMR10 rf /Fu 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: a4
+/setpagedevice where
+{ pop << /PageSize [595 842] >> setpagedevice }
+{ /a4 where { pop a4 } if }
+ifelse
+%%EndPaperSize
+ end
+%%EndSetup
+%%Page: 1 1
+TeXDict begin 1 0 bop 150 1318 a Fu(Libtasn1)p 150 1385
+3600 34 v 1035 1486 a Ft(Abstract)31 b(Syn)m(tax)f(Notation)j(One)d
+(\(ASN.1\))h(library)f(for)g(the)h(GNU)g(system)2592
+1594 y(for)f(v)m(ersion)h(2.7,)h(20)f(April)f(2010)150
+4928 y Fs(F)-11 b(abio)45 b(Fiorina)150 5061 y(Simon)g(Josefsson)h(\()p
+Fr(bug-gnutls@gnu.)o(or)o(g)p Fs(\))p 150 5141 3600 17
+v eop end
+%%Page: 2 2
+TeXDict begin 2 1 bop 150 4413 a Ft(This)21 b(man)m(ual)i(is)f(for)g
+(GNU)h(Libtasn1)g(\(v)m(ersion)g(2.7,)i(20)e(April)f(2010\),)k(whic)m
+(h)c(is)h(a)f(library)g(for)g(Abstract)150 4523 y(Syn)m(tax)31
+b(Notation)h(One)e(\(ASN.1\))h(and)f(Distinguish)h(Enco)s(ding)e(Rules)
+i(\(DER\))g(manipulation.)150 4658 y(Cop)m(yrigh)m(t)593
+4655 y(c)568 4658 y Fq(\015)21 b Ft(2001,)k(2002,)g(2003,)g(2004,)g
+(2006,)g(2007,)g(2008,)g(2009,)g(2010)e(F)-8 b(ree)22
+b(Soft)m(w)m(are)g(F)-8 b(oundation,)150 4767 y(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 Ft(i)150 299 y Fp(T)-13
+b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fs(1)135 b(In)l(tro)t
+(duction)13 b Fo(:)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 Fs(1)150 911 y(2)135 b(ASN.1)45
+b(structure)g(handling)16 b Fo(:)j(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g
+(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)61 b Fs(2)275
+1048 y Ft(2.1)92 b(ASN.1)30 b(syn)m(tax)20 b Fn(:)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 Ft(2)275 1157
+y(2.2)92 b(Naming)18 b Fn(:)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 Ft(3)275
+1267 y(2.3)92 b(Library)29 b(Notes)18 b Fn(:)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 Ft(3)275 1377 y(2.4)92
+b(F)-8 b(uture)30 b(dev)m(elopmen)m(ts)22 b Fn(:)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 Ft(4)150 1619 y Fs(3)135 b(Utilities)16
+b Fo(:)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 Fs(5)275 1756 y
+Ft(3.1)92 b(In)m(v)m(oking)31 b(asn1P)m(arser)15 b Fn(:)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 Ft(5)275 1866 y(3.2)92 b(In)m(v)m(oking)31
+b(asn1Co)s(ding)19 b Fn(:)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 Ft(5)275 1975 y(3.3)92 b(In)m(v)m(oking)31 b(asn1Deco)s(ding)17
+b Fn(:)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 Ft(5)150 2218 y Fs(4)135
+b(F)-11 b(unction)44 b(reference)21 b Fo(:)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 Fs(7)275 2355 y Ft(4.1)92 b(ASN.1)30
+b(sc)m(hema)i(functions)13 b Fn(:)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
+Ft(7)275 2464 y(4.2)92 b(ASN.1)30 b(\014eld)g(functions)12
+b Fn(:)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 Ft(7)275 2574
+y(4.3)92 b(DER)30 b(functions)17 b Fn(:)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 Ft(12)275 2683 y(4.4)92 b(Error)29
+b(handling)h(functions)23 b Fn(:)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 Ft(17)275
+2793 y(4.5)92 b(Auxilliary)31 b(functions)19 b Fn(:)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 Ft(17)150 3035 y Fs(App)t(endix)c(A)
+160 b(Cop)l(ying)45 b(Information)25 b Fo(:)c(:)f(:)f(:)g(:)h(:)f(:)h
+(:)f(:)h(:)f(:)h(:)f(:)70 b Fs(19)275 3172 y Ft(A.1)91
+b(GNU)31 b(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)21
+b Fn(:)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 Ft(19)150
+3415 y Fs(Concept)45 b(Index)18 b Fo(:)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 Fs(27)150
+3685 y(F)-11 b(unction)44 b(and)h(Data)h(Index)24 b Fo(:)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 Fs(28)p eop end
+%%Page: 1 4
+TeXDict begin 1 3 bop 150 -116 a Ft(Chapter)30 b(1:)41
+b(In)m(tro)s(duction)2592 b(1)150 299 y Fp(1)80 b(In)l(tro)t(duction)
+150 533 y Ft(This)34 b(do)s(cumen)m(t)g(describ)s(es)g(the)h(Libtasn1)g
+(library)f(dev)m(elop)s(ed)h(for)f(ASN.1)i(\(Abstract)f(Syn)m(tax)g
+(No-)150 643 y(tation)42 b(One\))g(structures)e(managemen)m(t)j(and)d
+(DER)h(\(Distinguished)h(Enco)s(ding)f(Rules\))g(enco)s(ding)150
+752 y(functions.)275 887 y(The)29 b(main)i(features)f(of)h(this)f
+(library)g(are:)225 1021 y Fq(\017)60 b Ft(On)30 b(line)g(ASN1)h
+(structure)f(managemen)m(t)i(that)f(do)s(esn't)f(require)g(an)m(y)g(C)g
+(co)s(de)h(\014le)g(generation.)225 1156 y Fq(\017)60
+b Ft(O\013)30 b(line)h(ASN1)f(structure)g(managemen)m(t)i(with)e(C)g
+(co)s(de)h(\014le)f(generation)i(con)m(taining)g(an)e(arra)m(y)-8
+b(.)225 1290 y Fq(\017)60 b Ft(DER)31 b(\(Distinguish)f(Enco)s(ding)g
+(Rules\))h(enco)s(ding.)225 1425 y Fq(\017)60 b Ft(No)31
+b(limits)g(for)f(INTEGER)g(and)g(ENUMERA)-8 b(TED)31
+b(v)-5 b(alues.)225 1559 y Fq(\017)60 b Ft(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
+1669 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
+1778 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
+1888 y(License)31 b(v)m(ersion)g(3.0)g(or)g(later.)225
+2022 y Fq(\017)60 b Ft(It's)31 b(thread-safe.)42 b(No)32
+b(global)g(v)-5 b(ariables)31 b(are)g(used)f(and)h(m)m(ultiple)g
+(library)f(handles)h(and)f(session)330 2132 y(handles)g(ma)m(y)h(b)s(e)
+e(used)h(in)g(parallel.)225 2267 y Fq(\017)60 b Ft(It's)35
+b(p)s(ortable.)53 b(It)35 b(should)f(w)m(ork)g(on)h(all)g(Unix)g(lik)m
+(e)h(op)s(erating)f(systems,)g(including)g(Windo)m(ws.)330
+2376 y(The)30 b(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 Ft(Chapter)30 b(2:)41
+b(ASN.1)31 b(structure)f(handling)2068 b(2)150 299 y
+Fp(2)80 b(ASN.1)53 b(structure)f(handling)150 623 y Fs(2.1)68
+b(ASN.1)45 b(syn)l(tax)150 782 y Ft(The)35 b(parser)f(is)i(case)g
+(sensitiv)m(e.)57 b(The)35 b(commen)m(ts)h(b)s(egin)f(with)g
+Fm(")p Ft({)g Fm(")g Ft(and)g(end)g(at)h(the)f(end)g(of)g(lines.)150
+892 y(An)30 b(example)h(is)f(in)h Fm(")p Ft(pkix.asn)p
+Fm(")e Ft(\014le.)41 b(ASN.1)31 b(de\014nitions)f(m)m(ust)g(ha)m(v)m(e)
+i(this)e(syn)m(tax:)436 1025 y Fm(definitions_name)44
+b({<object)h(definition>})436 1244 y(DEFINITIONS)g(<EXPLICIT)g(or)j
+(IMPLICIT>)d(TAGS)h(::=)436 1463 y(BEGIN)436 1683 y(<type)h(and)g
+(constants)e(definitions>)436 1902 y(END)275 2035 y Ft(The)29
+b(tok)m(en)j Fm(")p Ft(::=)p Fm(")e Ft(m)m(ust)g(b)s(e)g(separate)h
+(from)f(others)h(elemen)m(ts,)h(so)e(this)g(is)h(a)g(wrong)f
+(declaration:)676 2168 y Fm(;;)48 b(INCORRECT)676 2278
+y(Version)e(::=INTEGER)275 2411 y Ft(the)30 b(correct)i(form)e(is:)533
+2544 y Fm(Version)46 b(::=)h(INTEGER)275 2677 y Ft(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 2810 y Fq(\017)60 b Ft(INTEGER)225 2943
+y Fq(\017)g Ft(ENUMERA)-8 b(TED)225 3076 y Fq(\017)60
+b Ft(BOOLEAN)225 3210 y Fq(\017)g Ft(OBJECT)29 b(IDENTIFIER)225
+3343 y Fq(\017)60 b Ft(NULL)225 3476 y Fq(\017)g Ft(BIT)30
+b(STRING)225 3609 y Fq(\017)60 b Ft(OCTET)29 b(STRING)225
+3742 y Fq(\017)60 b Ft(UTCTime)225 3875 y Fq(\017)g Ft(GeneralizedTime)
+225 4009 y Fq(\017)g Ft(GeneralString)225 4142 y Fq(\017)g
+Ft(SEQUENCE)225 4275 y Fq(\017)g Ft(SEQUENCE)29 b(OF)225
+4408 y Fq(\017)60 b Ft(SET)225 4541 y Fq(\017)g Ft(SET)29
+b(OF)225 4674 y Fq(\017)60 b Ft(CHOICE)225 4807 y Fq(\017)g
+Ft(ANY)225 4941 y Fq(\017)g Ft(ANY)31 b(DEFINED)g(BY)275
+5097 y(This)36 b(v)m(ersion)i(do)s(esn't)f(manage)h(REAL)f(t)m(yp)s(e.)
+61 b(It)37 b(do)s(esn't)g(allo)m(w)i(the)e Fm(")p Ft(EXPOR)-8
+b(T)p Fm(")36 b Ft(and)h Fm(")p Ft(IM-)150 5207 y(POR)-8
+b(T)p Fm(")30 b Ft(sections)h(to)s(o.)275 5340 y(The)e(SIZE)g
+(constrain)m(ts)j(are)f(allo)m(w)m(ed,)h(but)e(no)g(c)m(hec)m(k)i(is)e
+(done)h(on)f(them.)p eop end
+%%Page: 3 6
+TeXDict begin 3 5 bop 150 -116 a Ft(Chapter)30 b(2:)41
+b(ASN.1)31 b(structure)f(handling)2068 b(3)150 299 y
+Fs(2.2)68 b(Naming)150 458 y Ft(Consider)30 b(this)g(de\014nition:)436
+627 y Fm(Example)46 b({)i(1)f(2)h(3)f(4)g(})436 846 y(DEFINITIONS)e
+(EXPLICIT)h(TAGS)g(::=)436 1066 y(BEGIN)436 1285 y(Group)h(::=)g
+(SEQUENCE)e({)580 1394 y(id)142 b(OBJECT)46 b(IDENTIFIER,)580
+1504 y(value)94 b(Value)436 1614 y(})436 1833 y(Value)47
+b(::=)g(SEQUENCE)e({)580 1942 y(value1)93 b(INTEGER,)580
+2052 y(value2)g(BOOLEAN)436 2161 y(})436 2381 y(END)275
+2550 y Ft(T)-8 b(o)83 b(iden)m(tify)h(the)g(t)m(yp)s(e)g('Group')f(y)m
+(ou)h(ha)m(v)m(e)h(to)f(use)f(the)h(n)m(ull)f(terminated)h(string)150
+2659 y Fm(")p Ft(Example.Group)p Fm(")p Ft(.)40 b(These)30
+b(strings)g(are)h(used)f(in)g(functions)g(that)h(are)f(describ)s(ed)g
+(b)s(elo)m(w.)275 2828 y(Others)f(examples:)275 2997
+y(Field)i('id')f(in)g('Group')g(t)m(yp)s(e)h(:)41 b Fm(")p
+Ft(Example.Group.id)p Fm(")p Ft(.)275 3166 y(Field)31
+b('v)-5 b(alue1')31 b(in)f(\014eld)g('v)-5 b(alue')32
+b(in)e(t)m(yp)s(e)g('Group':)41 b Fm(")p Ft(Example.Group.v)-5
+b(alue.v)g(alue1)p Fm(")p Ft(.)275 3335 y(Elemen)m(ts)32
+b(of)g(structured)f(t)m(yp)s(es)h(that)g(don't)g(ha)m(v)m(e)h(a)f
+(name,)g(receiv)m(e)i(the)e(name)f Fm(")p Ft(?1)p Fm(")p
+Ft(,)p Fm(")p Ft(?2)p Fm(")p Ft(,)i(and)150 3444 y(so)e(on.)275
+3613 y(The)e(name)i Fm(")p Ft(?LAST)p Fm(")e Ft(indicates)i(the)g(last)
+g(elemen)m(t)h(of)e(a)h Fm(SET_OF)e Ft(or)h Fm(SEQUENCE_OF)p
+Ft(.)150 3898 y Fs(2.3)68 b(Library)45 b(Notes)150 4057
+y Ft(The)30 b(header)g(\014le)h(of)f(this)g(library)g(is)h(`)p
+Fm(libtasn1.h)p Ft('.)275 4226 y(The)d(main)g(t)m(yp)s(e)h(used)f(in)h
+(it)g(is)g Fm(ASN1_TYPE)p Ft(,)e(and)h(it's)h(used)f(to)i(store)f(the)g
+(ASN.1)g(de\014nitions)g(and)150 4335 y(structures)h(\(instances\).)275
+4504 y(The)c(constan)m(t)i Fm(ASN1_TYPE_EMPTY)22 b Ft(can)27
+b(b)s(e)f(used)g(for)g(the)h(v)-5 b(ariable)27 b(initialization.)43
+b(F)-8 b(or)27 b(example:)438 4673 y Fm(ASN1_TYPE)45
+b(definitions=ASN1_TYPE_EM)o(PTY;)275 4842 y Ft(Some)35
+b(functions)h(require)f(a)i(parameter)f(named)f(errorDescription)i(of)f
+(c)m(har*)h(t)m(yp)s(e.)57 b(The)35 b(arra)m(y)150 4952
+y(m)m(ust)45 b(b)s(e)f(already)h(allo)s(cated)i(and)d(m)m(ust)g(ha)m(v)
+m(e)i(at)g(least)f Fm(ASN1_MAX_ERROR_DESCRIPTION)o(_SIZ)o(E)150
+5061 y Ft(b)m(ytes)31 b(\(E.g,)g(as)g(in)f Fm(char)f
+(Description[ASN1_MAX_ERRO)o(R_DE)o(SCRI)o(PTI)o(ON_S)o(IZE])o(;)p
+Ft(\).)275 5230 y Fm(ASN1_MAX_NAME_SIZE)f Ft(indicates)34
+b(the)g(maxim)m(um)f(n)m(um)m(b)s(er)f(of)i(c)m(haracters)h(of)e(a)h
+(name)f(inside)h(a)150 5340 y(\014le)c(with)h(ASN1)f(de\014nitions.)p
+eop end
+%%Page: 4 7
+TeXDict begin 4 6 bop 150 -116 a Ft(Chapter)30 b(2:)41
+b(ASN.1)31 b(structure)f(handling)2068 b(4)150 299 y
+Fs(2.4)68 b(F)-11 b(uture)44 b(dev)l(elopmen)l(ts)225
+458 y Fq(\017)60 b Ft(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 568 y(single)i(arra)m(y)g(lik)m(e)h
+(no)m(w\).)225 702 y Fq(\017)60 b Ft(T)m(yp)s(e)30 b(REAL.)p
+eop end
+%%Page: 5 8
+TeXDict begin 5 7 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Utilities)2776 b(5)150 299 y Fp(3)80 b(Utilities)150
+631 y Fs(3.1)68 b(In)l(v)l(oking)46 b(asn1P)l(arser)150
+790 y Ft(`)p Fm(asn1Parser)p Ft(')26 b(reads)j(one)g(\014le)f(with)g
+(ASN1)h(de\014nitions)f(and)g(generates)i(a)f(\014le)g(with)f(an)h
+(arra)m(y)g(to)g(use)150 900 y(with)h(libtasn1)h(functions.)150
+1034 y Fm(Usage:)94 b(asn1Parser)45 b([options])g(file)150
+1254 y(Options:)198 1363 y(-h)i(:)g(shows)g(the)g(help)f(message.)198
+1473 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198
+1582 y(-c)g(:)g(checks)f(the)h(syntax)f(only.)198 1692
+y(-o)h(file)g(:)g(output)f(file.)198 1802 y(-n)h(name)g(:)g(array)f
+(name.)150 2034 y Fs(3.2)68 b(In)l(v)l(oking)46 b(asn1Co)t(ding)150
+2193 y Ft(`)p Fm(asn1Coding)p Ft(')25 b(generates)k(a)f(DER)g(enco)s
+(ding)f(from)g(a)h(\014le)g(with)f(ASN1)h(de\014nitions)f(and)g
+(another)h(one)150 2303 y(with)i(assignmen)m(ts.)275
+2438 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 2572 y Fm(InstanceName)92 b(Asn1Definition)150
+2791 y(nameString)h(value)150 3010 y(nameString)g(value)150
+3120 y(...)275 3254 y Ft(The)29 b(output)h(\014le)h(is)f(a)h(binary)f
+(\014le)g(with)g(the)h(DER)f(enco)s(ding.)150 3389 y
+Fm(Usage:)94 b(asn1Coding)45 b([options])g(file1)h(file2)198
+3499 y(file1)g(:)i(file)e(with)h(ASN1)f(definitions.)198
+3608 y(file2)g(:)i(file)e(with)h(assignments.)150 3718
+y(Options:)198 3827 y(-h)g(:)g(shows)g(the)g(help)f(message.)198
+3937 y(-v)h(:)g(shows)g(version)f(information)e(and)j(exit.)198
+4046 y(-c)g(:)g(checks)f(the)h(syntax)f(only.)198 4156
+y(-o)h(file)g(:)g(output)f(file.)150 4389 y Fs(3.3)68
+b(In)l(v)l(oking)46 b(asn1Deco)t(ding)150 4548 y Ft(`)p
+Fm(asn1Decoding)p Ft(')21 b(generates)k(an)f(ASN1)g(structure)f(from)g
+(a)h(\014le)g(with)f(ASN1)h(de\014nitions)f(and)h(a)g(binary)150
+4658 y(\014le)30 b(with)h(a)f(DER)h(enco)s(ding.)150
+4792 y Fm(Usage:)94 b(asn1Decoding)44 b([options])i(file1)g(file2)g
+(type)198 4902 y(file1)g(:)i(file)e(with)h(ASN1)f(definitions.)198
+5011 y(file2)g(:)i(binary)e(file)g(with)h(a)g(DER)g(encoding.)198
+5121 y(type)f(:)i(ASN1)e(definition)f(name.)150 5230
+y(Options:)198 5340 y(-h)i(:)g(shows)g(the)g(help)f(message.)p
+eop end
+%%Page: 6 9
+TeXDict begin 6 8 bop 150 -116 a Ft(Chapter)30 b(3:)41
+b(Utilities)2776 b(6)198 299 y Fm(-v)47 b(:)g(shows)g(version)f
+(information)e(and)j(exit.)198 408 y(-c)g(:)g(checks)f(the)h(syntax)f
+(only.)198 518 y(-o)h(file)g(:)g(output)f(file.)p eop
+end
+%%Page: 7 10
+TeXDict begin 7 9 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2359 b(7)150 299 y Fp(4)80
+b(F)-13 b(unction)52 b(reference)150 651 y Fs(4.1)68
+b(ASN.1)45 b(sc)l(hema)g(functions)150 875 y Fl(asn1)p
+396 875 37 5 v 55 w(parser2tree)3350 1078 y Ft([F)-8
+b(unction])-3599 b Fk(asn1_retCode)56 b(asn1_parser2tree)50
+b Fj(\()p Fi(const)31 b(c)m(har)g(*)g Fh(file_name)12
+b Fi(,)565 1187 y(ASN1)p 803 1187 28 4 v 40 w(TYPE)30
+b(*)h Fh(definitions)12 b Fi(,)33 b(c)m(har)e(*)g Fh(errorDescription)
+12 b Fj(\))390 1297 y Fi(\014le)p 512 1297 V 40 w(name)5
+b Ft(:)41 b(sp)s(ecify)30 b(the)h(path)f(and)f(the)i(name)f(of)h
+(\014le)f(that)h(con)m(tains)h(ASN.1)f(declarations.)390
+1437 y Fi(de\014nitions)t Ft(:)40 b(return)29 b(the)h(p)s(oin)m(ter)h
+(to)g(the)f(structure)g(created)h(from)f Fm(")p Ft(\014le)p
+2977 1437 V 40 w(name)p Fm(")g Ft(ASN.1)g(dec-)390 1547
+y(larations.)390 1687 y Fi(errorDescription)p Ft(:)41
+b(return)30 b(the)g(error)g(description)h(or)f(an)g(empt)m(y)h(string)f
+(if)h(success.)390 1827 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 1937 y(the)i(de\014nitions)e(included)h(in)g
+Fm(file_name)e Ft(\014le.)390 2077 y Fg(Returns:)150
+2282 y Fl(asn1)p 396 2282 37 5 v 55 w(parser2arra)m(y)3350
+2485 y Ft([F)-8 b(unction])-3599 b Fk(int)53 b(asn1_parser2array)e
+Fj(\()p Fi(const)31 b(c)m(har)g(*)g Fh(inputFileName)12
+b Fi(,)34 b(const)c(c)m(har)h(*)565 2594 y Fh(outputFileName)12
+b Fi(,)34 b(const)d(c)m(har)g(*)g Fh(vectorName)12 b
+Fi(,)33 b(c)m(har)e(*)f Fh(errorDescription)12 b Fj(\))390
+2704 y Fi(inputFileName)5 b Ft(:)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
+2814 y(tions.)390 2954 y Fi(outputFileName)5 b Ft(:)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 3063 y(de\014nition.)390
+3204 y Fi(v)m(ectorName)5 b Ft(:)43 b(sp)s(ecify)30 b(the)h(name)f(of)h
+(the)f(C)g(v)m(ector.)390 3344 y Fi(errorDescription)p
+Ft(:)41 b(return)30 b(the)g(error)g(description)h(or)f(an)g(empt)m(y)h
+(string)f(if)h(success.)390 3484 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 3594 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
+Fm(inputFileName)d Ft(\014le.)390 3703 y(If)49 b Fm(inputFileName)c
+Ft(is)50 b Fm(")p Ft(/aa/bb/xx.yy)p Fm(")g Ft(and)e Fm(outputFileName)d
+Ft(is)50 b Fm(NULL)p Ft(,)j(the)c(\014le)g(cre-)390 3813
+y(ated)c(is)f Fm(")p Ft(/aa/bb/xx)p 1188 3813 28 4 v
+41 w(asn1)p 1406 3813 V 40 w(tab.c)p Fm(")p Ft(.)83 b(If)43
+b Fm(vectorName)f Ft(is)i Fm(NULL)f Ft(the)h(v)m(ector)i(name)e(will)h
+(b)s(e)390 3923 y Fm(")p Ft(xx)p 540 3923 V 40 w(asn1)p
+757 3923 V 40 w(tab)p Fm(")p Ft(.)390 4063 y Fg(Returns:)150
+4304 y Fs(4.2)68 b(ASN.1)45 b(\014eld)g(functions)150
+4528 y Fl(asn1)p 396 4528 37 5 v 55 w(arra)m(y2tree)3350
+4731 y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56
+b(asn1_array2tree)50 b Fj(\()p Fi(const)31 b(ASN1)p 2171
+4731 28 4 v 41 w(ARRA)-8 b(Y)p 2542 4731 V 40 w(TYPE)30
+b(*)565 4840 y Fh(array)12 b Fi(,)32 b(ASN1)p 1132 4840
+V 40 w(TYPE)e(*)h Fh(definitions)12 b Fi(,)33 b(c)m(har)e(*)g
+Fh(errorDescription)12 b Fj(\))390 4950 y Fi(arra)m(y)c
+Ft(:)41 b(sp)s(ecify)30 b(the)h(arra)m(y)f(that)h(con)m(tains)h(ASN.1)f
+(declarations)390 5090 y Fi(de\014nitions)t Ft(:)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 5200 y(tions)390 5340
+y Fi(errorDescription)p Ft(:)41 b(return)30 b(the)g(error)g
+(description.)p eop end
+%%Page: 8 11
+TeXDict begin 8 10 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2359 b(8)390 299 y(Creates)38
+b(the)g(structures)f(needed)h(to)g(manage)h(the)f(ASN.1)g
+(de\014nitions.)62 b Fm(array)36 b Ft(is)i(a)g(v)m(ector)390
+408 y(created)31 b(b)m(y)g Fm(asn1_parser2array\(\))p
+Ft(.)390 553 y Fg(Returns:)150 763 y Fl(asn1)p 396 763
+37 5 v 55 w(delete)p 769 763 V 54 w(structure)3350 970
+y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56 b
+(asn1_delete_structure)c Fj(\()p Fi(ASN1)p 2247 970 28
+4 v 40 w(TYPE)30 b(*)h Fh(structure)12 b Fj(\))390 1079
+y Fi(structure)5 b Ft(:)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 1224 y(Deletes)86
+b(the)d(structure)g(*)p Fm(structure)p Ft(.)198 b(A)m(t)85
+b(the)f(end,)96 b(*)p Fm(structure)82 b Ft(is)h(set)h(to)390
+1333 y(ASN1)p 628 1333 V 40 w(TYPE)p 926 1333 V 40 w(EMPTY.)390
+1478 y Fg(Returns:)150 1687 y Fl(asn1)p 396 1687 37 5
+v 55 w(delete)p 769 1687 V 54 w(elemen)m(t)3350 1894
+y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56 b(asn1_delete_element)
+51 b Fj(\()p Fi(ASN1)p 2142 1894 28 4 v 41 w(TYPE)30
+b Fh(structure)12 b Fi(,)565 2004 y(const)31 b(c)m(har)g(*)f
+Fh(element_name)12 b Fj(\))390 2114 y Fi(structure)5
+b Ft(:)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
+2258 y Fi(elemen)m(t)p 700 2258 V 42 w(name)5 b Ft(:)40
+b(elemen)m(t's)32 b(name)f(y)m(ou)g(w)m(an)m(t)g(to)g(delete.)390
+2403 y(Deletes)h(the)f(elemen)m(t)h(named)e(*)p Fm(element_name)d
+Ft(inside)j(*)p Fm(structure)p Ft(.)390 2548 y Fg(Returns:)150
+2757 y Fl(asn1)p 396 2757 37 5 v 55 w(create)p 776 2757
+V 53 w(elemen)m(t)3350 2964 y Ft([F)-8 b(unction])-3599
+b Fk(asn1_retCode)56 b(asn1_create_element)51 b Fj(\()p
+Fi(ASN1)p 2142 2964 28 4 v 41 w(TYPE)30 b Fh(definitions)12
+b Fi(,)565 3074 y(const)31 b(c)m(har)g(*)f Fh(source_name)12
+b Fi(,)34 b(ASN1)p 1959 3074 V 40 w(TYPE)c(*)h Fh(element)12
+b Fj(\))390 3183 y Fi(de\014nitions)t Ft(:)40 b(p)s(oin)m(ter)30
+b(to)h(the)g(structure)f(returned)f(b)m(y)h Fm(")p Ft(parser)p
+2633 3183 V 40 w(asn1)p Fm(")g Ft(function)390 3328 y
+Fi(source)p 644 3328 V 40 w(name)5 b Ft(:)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 3328 V 40 w(structure\).)390
+3473 y Fi(elemen)m(t)r Ft(:)42 b(p)s(oin)m(ter)31 b(to)g(the)f
+(structure)g(created.)390 3617 y(Creates)h(a)g(structure)f(of)g(t)m(yp)
+s(e)h Fm(source_name)p Ft(.)37 b(Example)31 b(using)f
+Fm(")p Ft(pkix.asn)p Fm(")p Ft(:)390 3762 y(rc)g(=)g(asn1)p
+780 3762 V 41 w(create)p 1057 3762 V 41 w(elemen)m(t\(cert)p
+1588 3762 V 43 w(def,)g Fm(")p Ft(PKIX1.Certi\014cate)p
+Fm(")p Ft(,)i(certptr\);)390 3907 y Fg(Returns:)150 4116
+y Fl(asn1)p 396 4116 37 5 v 55 w(prin)m(t)p 716 4116
+V 54 w(structure)3350 4323 y Ft([F)-8 b(unction])-3599
+b Fk(void)54 b(asn1_print_structure)d Fj(\()p Fi(FILE)31
+b(*)f Fh(out)12 b Fi(,)31 b(ASN1)p 2317 4323 28 4 v 41
+w(TYPE)f Fh(structure)12 b Fi(,)565 4433 y(const)31 b(c)m(har)g(*)f
+Fh(name)12 b Fi(,)32 b(in)m(t)f Fh(mode)12 b Fj(\))390
+4542 y Fi(out)r Ft(:)41 b(p)s(oin)m(ter)30 b(to)h(the)g(output)f
+(\014le)g(\(e.g.)43 b(stdout\).)390 4687 y Fi(structure)5
+b Ft(:)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 4831 y Fi(name)5 b Ft(:)41
+b(an)30 b(elemen)m(t)i(of)f(the)f(structure)390 4976
+y Fi(mo)s(de)5 b Ft(:)45 b(sp)s(ecify)32 b(ho)m(w)h(m)m(uc)m(h)f(of)h
+(the)g(structure)f(to)h(prin)m(t,)g(can)g(b)s(e)f Fm(ASN1_PRINT_NAME)p
+Ft(,)d Fm(ASN1_)390 5086 y(PRINT_NAME_TYPE)p Ft(,)d Fm
+(ASN1_PRINT_NAME_TYPE_VALUE)o Ft(,)f(or)30 b Fm(ASN1_PRINT_ALL)p
+Ft(.)390 5230 y(Prin)m(ts)j(on)g(the)g Fm(out)f Ft(\014le)h(descriptor)
+f(the)h(structure's)g(tree)h(starting)f(from)g(the)g
+Fm(name)e Ft(elemen)m(t)390 5340 y(inside)f(the)h(structure)f
+Fm(structure)p Ft(.)p eop end
+%%Page: 9 12
+TeXDict begin 9 11 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2359 b(9)150 299 y Fl(asn1)p
+396 299 37 5 v 55 w(n)m(um)m(b)s(er)p 860 299 V 54 w(of)p
+1012 299 V 55 w(elemen)m(ts)3350 499 y Ft([F)-8 b(unction])-3599
+b Fk(asn1_retCode)56 b(asn1_number_of_element)q(s)51
+b Fj(\()p Fi(ASN1)p 2351 499 28 4 v 41 w(TYPE)30 b Fh(element)12
+b Fi(,)565 609 y(const)31 b(c)m(har)g(*)f Fh(name)12
+b Fi(,)32 b(in)m(t)f(*)f Fh(num)12 b Fj(\))390 718 y
+Fi(elemen)m(t)r Ft(:)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 856 y Fi(name)5 b Ft(:)41
+b(the)30 b(name)h(of)f(a)h(sub-structure)e(of)i(R)m(OOT.)390
+994 y Fi(n)m(um)p Ft(:)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 1132
+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
+1242 y Fm(")p Ft(?1)p Fm(")p Ft(,)p Fm(")p Ft(?2)p Fm(")p
+Ft(,)h(...)390 1380 y Fg(Returns:)150 1582 y Fl(asn1)p
+396 1582 37 5 v 55 w(\014nd)p 655 1582 V 54 w(structure)p
+1200 1582 V 54 w(from)p 1504 1582 V 55 w(oid)3350 1783
+y Ft([F)-8 b(unction])-3599 b Fk(const)54 b(char)f(*)g
+(asn1_find_structure_fr)q(om_)q(oid)f Fj(\()p Fi(ASN1)p
+2613 1783 28 4 v 41 w(TYPE)565 1892 y Fh(definitions)12
+b Fi(,)34 b(const)c(c)m(har)h(*)g Fh(oidValue)12 b Fj(\))390
+2002 y Fi(de\014nitions)t Ft(:)40 b(ASN1)31 b(de\014nitions)390
+2140 y Fi(oidV)-8 b(alue)5 b Ft(:)42 b(v)-5 b(alue)31
+b(of)g(the)f(OID)g(to)i(searc)m(h)f(\(e.g.)42 b Fm(")p
+Ft(1.2.3.4)p Fm(")p Ft(\).)390 2278 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
+2416 y Fg(Returns:)41 b Fm(NULL)29 b Ft(when)h Fm(oidValue)e
+Ft(not)j(found,)e(otherwise)i(the)g(p)s(oin)m(ter)g(to)g(a)g(constan)m
+(t)h(string)390 2525 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.)150 2728 y Fl(asn1)p
+396 2728 37 5 v 55 w(cop)m(y)p 697 2728 V 53 w(no)s(de)3350
+2928 y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56
+b(asn1_copy_node)50 b Fj(\()p Fi(ASN1)p 1881 2928 28
+4 v 40 w(TYPE)30 b Fh(dst)12 b Fi(,)31 b(const)g(c)m(har)g(*)565
+3038 y Fh(dst_name)12 b Fi(,)33 b(ASN1)p 1289 3038 V
+40 w(TYPE)d Fh(src)12 b Fi(,)31 b(const)g(c)m(har)f(*)h
+Fh(src_name)12 b Fj(\))390 3147 y Fi(dst)r Ft(:)40 b(Destination)32
+b(ASN1)p 1306 3147 V 41 w(TYPE)e(no)s(de.)390 3285 y
+Fi(dst)p 518 3285 V 40 w(name)5 b Ft(:)41 b(Field)31
+b(name)f(in)g(destination)h(no)s(de.)390 3423 y Fi(src)6
+b Ft(:)40 b(Source)30 b(ASN1)p 1104 3423 V 41 w(TYPE)f(no)s(de.)390
+3561 y Fi(src)p 508 3561 V 40 w(name)5 b Ft(:)41 b(Field)31
+b(name)f(in)g(source)h(no)s(de.)390 3699 y(Create)g(a)g(deep)f(cop)m(y)
+h(of)g(a)f(ASN1)p 1600 3699 V 41 w(TYPE)g(v)-5 b(ariable.)390
+3837 y Fg(Return)30 b(v)-5 b(alue:)41 b Ft(Return)30
+b Fm(ASN1_SUCCESS)d Ft(on)j(success.)150 4040 y Fl(asn1)p
+396 4040 37 5 v 55 w(write)p 728 4040 V 53 w(v)-7 b(alue)3350
+4240 y Ft([F)f(unction])-3599 b Fk(asn1_retCode)56 b(asn1_write_value)
+50 b Fj(\()p Fi(ASN1)p 1985 4240 28 4 v 41 w(TYPE)30
+b Fh(node_root)12 b Fi(,)33 b(const)565 4350 y(c)m(har)e(*)g
+Fh(name)12 b Fi(,)31 b(const)g(v)m(oid)g(*)g Fh(ivalue)12
+b Fi(,)31 b(in)m(t)g Fh(len)12 b Fj(\))390 4459 y Fi(no)s(de)p
+586 4459 V 39 w(ro)s(ot)r Ft(:)41 b(p)s(oin)m(ter)31
+b(to)g(a)g(structure)390 4597 y Fi(name)5 b Ft(:)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 4735 y Fi(iv)-5 b(alue)5
+b Ft(:)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 Fm(>)p
+Ft(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
+4845 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 4954 y(an)30 b(in)m(teger)i(v)-5
+b(alue.)390 5092 y Fi(len)p Ft(:)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
+5202 y(v)-5 b(alue)31 b(is)f(a)h(n)m(ull)f(terminated)h(string)390
+5340 y(Set)g(the)f(v)-5 b(alue)31 b(of)g(one)f(elemen)m(t)i(inside)e(a)
+h(structure.)p eop end
+%%Page: 10 13
+TeXDict begin 10 12 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(10)390 299 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
+408 y(and)30 b(len=0.)41 b(Using)30 b Fm(")p Ft(pkix.asn)p
+Fm(")p Ft(:)390 545 y(result=asn1)p 867 545 28 4 v 40
+w(write)p 1109 545 V 40 w(v)-5 b(alue\(cert,)32 b Fm(")p
+Ft(tbsCerti\014cate.issuerUniqueID)p Fm(")p Ft(,)f(NULL,)g(0\);)390
+682 y Fg(Description)42 b(for)f(eac)m(h)h(t)m(yp)s(e:)63
+b(INTEGER:)42 b Ft(V)-10 b(ALUE)41 b(m)m(ust)g(con)m(tain)h(a)g(t)m(w)m
+(o's)h(complemen)m(t)390 792 y(form)30 b(in)m(teger.)390
+929 y(v)-5 b(alue[0]=0xFF)52 b(,)e(len=1)g(-)p Fm(>)g
+Ft(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 Fm(>)390 1039 y Ft(in)m(teger=-1.)
+85 b(v)-5 b(alue[0]=0x01)46 b(,)i(len=1)d(-)p Fm(>)f
+Ft(in)m(teger=)i(1.)83 b(v)-5 b(alue[0]=0x00)47 b(v)-5
+b(alue[1]=0x01)47 b(,)390 1148 y(len=2)31 b(-)p Fm(>)f
+Ft(in)m(teger=)h(1.)42 b(v)-5 b(alue=)p Fm(")p Ft(123)p
+Fm(")31 b Ft(,)f(len=0)h(-)p Fm(>)f Ft(in)m(teger=)i(123.)390
+1285 y Fg(ENUMERA)-8 b(TED:)30 b Ft(As)g(INTEGER)g(\(but)g(only)h(with)
+f(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 1422 y
+Fg(BOOLEAN:)g Ft(V)-10 b(ALUE)35 b(m)m(ust)f(b)s(e)f(the)i(n)m(ull)f
+(terminated)g(string)h Fm(")p Ft(TR)m(UE)p Fm(")e Ft(or)h
+Fm(")p Ft(F)-10 b(ALSE)p Fm(")34 b Ft(and)390 1532 y(LEN)c(!=)g(0.)390
+1669 y(v)-5 b(alue=)p Fm(")p Ft(TR)m(UE)p Fm(")88 b Ft(,)103
+b(len=1)89 b(-)p Fm(>)g Ft(b)s(o)s(olean=TR)m(UE.)f(v)-5
+b(alue=)p Fm(")p Ft(F)-10 b(ALSE)p Fm(")88 b Ft(,)103
+b(len=1)89 b(-)p Fm(>)390 1778 y Ft(b)s(o)s(olean=F)-10
+b(ALSE.)390 1915 y Fg(OBJECT)26 b(IDENTIFIER:)h Ft(V)-10
+b(ALUE)28 b(m)m(ust)f(b)s(e)f(a)i(n)m(ull)f(terminated)h(string)f(with)
+g(eac)m(h)h(n)m(um)m(b)s(er)390 2025 y(separated)j(b)m(y)f(a)h(dot)f
+(\(e.g.)43 b Fm(")p Ft(1.2.3.543.1)p Fm(")p Ft(\).)h(LEN)30
+b(!=)h(0.)390 2162 y(v)-5 b(alue=)p Fm(")p Ft(1)31 b(2)f(840)i(10040)h
+(4)d(3)p Fm(")h Ft(,)g(len=1)f(-)p Fm(>)g Ft(OID=dsa-with-sha.)390
+2299 y Fg(UTCTime:)84 b Ft(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
+2408 y Fm(")p Ft(YYMMDDhhmmssZ)p Fm(")p Ft(,)118 b Fm(")p
+Ft(YYMMDDhhmmssZ)p Fm(")p Ft(,)g Fm(")p Ft(YYMMDDhhmmss)p
+Fm(+)p Ft(hh'mm')p Fm(")p Ft(,)390 2518 y Fm(")p Ft
+(YYMMDDhhmmss-hh'mm')p Fm(")p Ft(,)40 b Fm(")p Ft(YYMMDDhhmm)p
+Fm(+)p Ft(hh'mm')p Fm(")p Ft(,)g(or)f Fm(")p Ft(YYMMDDhhmm-)390
+2628 y(hh'mm')p Fm(")p Ft(.)g(LEN)31 b(!=)f(0.)390 2765
+y(v)-5 b(alue=)p Fm(")p Ft(9801011200Z)p Fm(")43 b Ft(,)f(len=1)e(-)p
+Fm(>)f Ft(time=Jann)m(uary)g(1st,)k(1998)e(at)f(12h)g(00m)g(Green)m
+(wic)m(h)390 2874 y(Mean)31 b(Time)390 3011 y Fg(GeneralizedTime:)94
+b Ft(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 Fm(")p Ft(YYYYMMDDhh-)390 3121 y(mmss.sZ)p
+Fm(")p Ft(,)185 b Fm(")p Ft(YYYYMMDDhhmmss.sZ)p Fm(")p
+Ft(,)h Fm(")p Ft(YYYYMMDDhhmmss.s)p Fm(+)p Ft(hh'mm')p
+Fm(")p Ft(,)390 3230 y Fm(")p Ft(YYYYMMDDhhmmss.s-hh'mm')p
+Fm(")p Ft(,)279 b Fm(")p Ft(YYYYMMDDhhmm)p Fm(+)p Ft(hh'mm')p
+Fm(")p Ft(,)g(or)390 3340 y Fm(")p Ft(YYYYMMDDhhmm-hh'mm')p
+Fm(")36 b Ft(where)h(ss.s)f(indicates)i(the)f(seconds)f(with)h(an)m(y)g
+(precision)390 3450 y(lik)m(e)32 b Fm(")p Ft(10.1)p Fm(")f
+Ft(or)f Fm(")p Ft(01.02)p Fm(")p Ft(.)43 b(LEN)30 b(!=)g(0)390
+3587 y(v)-5 b(alue=)p Fm(")p Ft(2001010112001.1)q(2-0)q(70)q(0)p
+Fm(")50 b Ft(,)e(len=1)c(-)p Fm(>)h Ft(time=Jann)m(uary)e(1st,)49
+b(2001)d(at)f(12h)f(00m)390 3696 y(01.12s)32 b(P)m(aci\014c)g(Da)m
+(yligh)m(t)h(Time)390 3833 y Fg(OCTET)23 b(STRING:)h
+Ft(V)-10 b(ALUE)24 b(con)m(tains)h(the)e(o)s(ctet)i(string)f(and)f(LEN)
+g(is)h(the)f(n)m(um)m(b)s(er)g(of)g(o)s(ctets.)390 3970
+y(v)-5 b(alue=)p Fm(")p Ft($)p Fm(\\)p Ft(bac)m(kslash$x01$)p
+Fm(\\)p Ft(bac)m(kslash$x02$)p Fm(\\)p Ft(bac)m(kslash$x03)q
+Fm(")62 b Ft(,)g(len=3)57 b(-)p Fm(>)f Ft(three)g(b)m(ytes)390
+4080 y(o)s(ctet)32 b(string)390 4217 y Fg(GeneralString:)42
+b Ft(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 4354
+y(v)-5 b(alue=)p Fm(")p Ft($)p Fm(\\)p Ft(bac)m(kslash$x01$)p
+Fm(\\)p Ft(bac)m(kslash$x02$)p Fm(\\)p Ft(bac)m(kslash$x03)q
+Fm(")62 b Ft(,)g(len=3)57 b(-)p Fm(>)f Ft(three)g(b)m(ytes)390
+4463 y(generalstring)390 4600 y Fg(BIT)38 b(STRING:)i
+Ft(V)-10 b(ALUE)38 b(con)m(tains)i(the)f(bit)g(string)f(organized)i(b)m
+(y)e(b)m(ytes)i(and)e(LEN)g(is)h(the)390 4710 y(n)m(um)m(b)s(er)29
+b(of)i(bits.)390 4847 y(v)-5 b(alue=)p Fm(")p Ft($)p
+Fm(\\)p Ft(bac)m(kslash$xCF)p Fm(")31 b Ft(,)g(len=6)g(-)p
+Fm(>)f Ft(bit)g(string=)p Fm(")p Ft(110011)p Fm(")j Ft(\(six)d(bits\))
+390 4984 y Fg(CHOICE:)f Ft(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 5093 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 Fm(")p
+Ft(pkix.asn)p Fm("\\)p Ft(:)390 5230 y(result=asn1)p
+867 5230 V 40 w(write)p 1109 5230 V 40 w(v)-5 b(alue\(cert,)74
+b Fm(")p Ft(certi\014cate1.tbsCerti\014cate.sub)5 b(ject)p
+Fm(")p Ft(,)76 b Fm(")p Ft(rdnSequence)p Fm(")p Ft(,)390
+5340 y(1\);)p eop end
+%%Page: 11 14
+TeXDict begin 11 13 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(11)390 299 y Fg(ANY:)30
+b Ft(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 436 y Fg(SEQUENCE)i(OF:)i
+Ft(V)-10 b(ALUE)35 b(m)m(ust)g(b)s(e)f(the)h(n)m(ull)g(terminated)h
+(string)e Fm(")p Ft(NEW)p Fm(")h Ft(and)f(LEN)h(!=)390
+546 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
+655 y(this)e(elemen)m(t)i(will)f(b)s(e)f Fm(")p Ft(?1)p
+Fm(")g Ft(if)g(it's)h(the)g(\014rst)e(one,)i Fm(")p Ft(?2)p
+Fm(")f Ft(for)g(the)h(second)f(and)g(so)h(on.)390 793
+y(Using)g Fm(")p Ft(pkix.asn)p Fm("\\)p Ft(:)390 930
+y(result=asn1)p 867 930 28 4 v 40 w(write)p 1109 930
+V 40 w(v)-5 b(alue\(cert,)241 b Fm(")p Ft
+(certi\014cate1.tbsCerti\014cate.sub)5 b(ject.rdnSequence)p
+Fm(")p Ft(,)390 1040 y Fm(")p Ft(NEW)p Fm(")p Ft(,)30
+b(1\);)390 1177 y Fg(SET)g(OF:)g Ft(the)h(same)g(as)f(SEQUENCE)f(OF.)i
+(Using)g Fm(")p Ft(pkix.asn)p Fm(")p Ft(:)390 1315 y(result=asn1)p
+867 1315 V 40 w(write)p 1109 1315 V 40 w(v)-5 b(alue\(cert,)25
+b Fm(")p Ft(tbsCerti\014cate.sub)5 b(ject.rdnSequence.?LAST)p
+Fm(")p Ft(,)22 b Fm(")p Ft(NEW)p Fm(")p Ft(,)390 1424
+y(1\);)390 1562 y Fg(Returns:)150 1764 y Fl(asn1)p 396
+1764 37 5 v 55 w(read)p 685 1764 V 54 w(v)-7 b(alue)3350
+1964 y Ft([F)f(unction])-3599 b Fk(asn1_retCode)56 b(asn1_read_value)50
+b Fj(\()p Fi(ASN1)p 1933 1964 28 4 v 41 w(TYPE)30 b Fh(root)12
+b Fi(,)31 b(const)g(c)m(har)f(*)565 2073 y Fh(name)12
+b Fi(,)31 b(v)m(oid)g(*)g Fh(ivalue)12 b Fi(,)32 b(in)m(t)f(*)g
+Fh(len)12 b Fj(\))390 2183 y Fi(ro)s(ot)r Ft(:)41 b(p)s(oin)m(ter)30
+b(to)i(a)e(structure.)390 2320 y Fi(name)5 b Ft(:)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 2458 y Fi(iv)-5
+b(alue)5 b Ft(:)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 2567 y(cells)e(already)g(allo)s(cated.)390
+2705 y Fi(len)p Ft(:)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 2842 y(Returns)29
+b(the)i(v)-5 b(alue)31 b(of)f(one)h(elemen)m(t)h(inside)e(a)h
+(structure.)390 2979 y(If)h(an)h(elemen)m(t)h(is)f(OPTIONAL)f(and)g
+(the)h(function)f Fm(")p Ft(read)p 2494 2979 V 40 w(v)-5
+b(alue)p Fm(")33 b Ft(returns)f Fm(ASN1_ELEMENT_)390
+3089 y(NOT_FOUND)p Ft(,)22 b(it)i(means)f(that)h(this)f(elemen)m(t)h(w)
+m(asn't)g(presen)m(t)f(in)g(the)g(der)g(enco)s(ding)g(that)h(created)
+390 3199 y(the)37 b(structure.)61 b(The)37 b(\014rst)g(elemen)m(t)h(of)
+g(a)f(SEQUENCE)p 2439 3199 V 39 w(OF)g(or)h(SET)p 2943
+3199 V 39 w(OF)f(is)g(named)g Fm(")p Ft(?1)p Fm(")p Ft(.)390
+3308 y(The)30 b(second)g(one)h Fm(")p Ft(?2)p Fm(")f
+Ft(and)g(so)g(on.)390 3446 y Fg(INTEGER:)h Ft(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 3583 y(in)m(teger=-1)i(-)p Fm(>)f Ft(v)-5
+b(alue[0]=0xFF)32 b(,)f(len=1.)41 b(in)m(teger=1)32 b(-)p
+Fm(>)e Ft(v)-5 b(alue[0]=0x01)33 b(,)d(len=1.)390 3721
+y Fg(ENUMERA)-8 b(TED:)30 b Ft(As)g(INTEGER)g(\(but)g(only)h(with)f
+(not)g(negativ)m(e)j(n)m(um)m(b)s(ers\).)390 3858 y Fg(BOOLEAN:)38
+b Ft(V)-10 b(ALUE)39 b(will)h(b)s(e)e(the)h(n)m(ull)g(terminated)h
+(string)f Fm(")p Ft(TR)m(UE)p Fm(")f Ft(or)h Fm(")p Ft(F)-10
+b(ALSE)p Fm(")39 b Ft(and)390 3968 y(LEN=5)30 b(or)h(LEN=6.)390
+4105 y Fg(OBJECT)g(IDENTIFIER:)h Ft(V)-10 b(ALUE)32 b(will)h(b)s(e)e(a)
+i(n)m(ull)f(terminated)g(string)g(with)g(eac)m(h)h(n)m(um)m(b)s(er)390
+4215 y(separated)e(b)m(y)f(a)h(dot)f(\(i.e.)42 b Fm(")p
+Ft(1.2.3.543.1)p Fm(")p Ft(\).)390 4352 y(LEN)30 b(=)g(strlen\(V)-10
+b(ALUE\))p Fm(+)p Ft(1)390 4489 y Fg(UTCTime:)41 b Ft(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 Fm(")p Ft(YYM-)390
+4599 y(MDDhhmmss)p Fm(+)p Ft(hh'mm')p Fm(")28 b Ft(or)j
+Fm(")p Ft(YYMMDDhhmmss-hh'mm')p Fm(")p Ft(.)39 b(LEN=strlen\(V)-10
+b(ALUE\))p Fm(+)p Ft(1.)390 4736 y Fg(GeneralizedTime:)48
+b Ft(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 4846 y(to)d(set)g(the)g
+(v)-5 b(alue.)390 4983 y Fg(OCTET)27 b(STRING:)i Ft(V)-10
+b(ALUE)28 b(will)g(con)m(tain)h(the)f(o)s(ctet)h(string)e(and)h(LEN)f
+(will)h(b)s(e)f(the)h(n)m(um)m(b)s(er)390 5093 y(of)j(o)s(ctets.)390
+5230 y Fg(GeneralString:)51 b Ft(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 5340 y(of)c(o)s(ctets.)p eop end
+%%Page: 12 15
+TeXDict begin 12 14 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(12)390 299 y Fg(BIT)34
+b(STRING:)h Ft(V)-10 b(ALUE)34 b(will)g(con)m(tain)h(the)g(bit)f
+(string)g(organized)h(b)m(y)f(b)m(ytes)g(and)g(LEN)g(will)390
+408 y(b)s(e)c(the)g(n)m(um)m(b)s(er)f(of)i(bits.)390
+553 y Fg(CHOICE:)j Ft(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 662 y(lected.)390 806 y Fg(ANY:)h Ft(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 916 y(the)31 b(structure)e(actually)j(used.)390
+1060 y Fg(Returns:)150 1269 y Fl(asn1)p 396 1269 37 5
+v 55 w(read)p 685 1269 V 54 w(tag)3350 1475 y Ft([F)-8
+b(unction])-3599 b Fk(asn1_retCode)56 b(asn1_read_tag)49
+b Fj(\()p Fi(ASN1)p 1828 1475 28 4 v 41 w(TYPE)30 b Fh(root)12
+b Fi(,)31 b(const)g(c)m(har)g(*)g Fh(name)12 b Fi(,)565
+1585 y(in)m(t)31 b(*)g Fh(tagValue)12 b Fi(,)32 b(in)m(t)f(*)g
+Fh(classValue)12 b Fj(\))390 1694 y Fi(ro)s(ot)r Ft(:)41
+b(p)s(oin)m(ter)30 b(to)i(a)e(structure)390 1838 y Fi(name)5
+b Ft(:)41 b(the)30 b(name)h(of)f(the)h(elemen)m(t)h(inside)e(a)h
+(structure.)390 1982 y Fi(tagV)-8 b(alue)5 b Ft(:)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 2126 y Fi(classV)d(alue)5
+b Ft(:)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 2271 y(Returns)d(the)i(T)-8
+b(A)m(G)31 b(and)f(the)h(CLASS)e(of)h(one)h(elemen)m(t)h(inside)e(a)h
+(structure.)390 2415 y Fg(CLASS)38 b(can)h(ha)m(v)m(e)i(one)f(of)g
+(these)h(constan)m(ts:)61 b Fm(ASN1_CLASS_APPLICATION)p
+Ft(,)36 b Fm(ASN1_CLASS_)390 2524 y(UNIVERSAL)p Ft(,)28
+b Fm(ASN1_CLASS_PRIVATE)d Ft(or)31 b Fm(ASN1_CLASS_CONTEXT_SPECI)o(FIC)
+o Ft(.)390 2668 y Fg(Returns:)150 2915 y Fs(4.3)68 b(DER)46
+b(functions)150 3139 y Fl(asn1)p 396 3139 37 5 v 55 w(length)p
+786 3139 V 54 w(der)3350 3346 y Ft([F)-8 b(unction])-3599
+b Fk(void)54 b(asn1_length_der)c Fj(\()p Fi(unsigned)29
+b(long)h(in)m(t)h Fh(len)12 b Fi(,)30 b(unsigned)f(c)m(har)i(*)f
+Fh(ans)12 b Fi(,)31 b(in)m(t)565 3455 y(*)g Fh(ans_len)12
+b Fj(\))390 3565 y Fi(len)p Ft(:)41 b(v)-5 b(alue)31
+b(to)g(con)m(v)m(ert.)390 3709 y Fi(ans)t Ft(:)40 b(string)31
+b(returned.)390 3853 y Fi(ans)p 528 3853 28 4 v 40 w(len)p
+Ft(:)41 b(n)m(um)m(b)s(er)29 b(of)h(meaningful)g(b)m(ytes)h(of)g(ANS)f
+(\(ans[0]..ans[ans)p 2811 3853 V 42 w(len-1]\).)390 3997
+y(Creates)g(the)g(DER)f(co)s(ding)g(for)g(the)h(LEN)f(parameter)h
+(\(only)g(the)f(length\).)41 b(The)29 b Fm(ans)g Ft(bu\013er)f(is)390
+4107 y(pre-allo)s(cated)k(and)e(m)m(ust)g(ha)m(v)m(e)i(ro)s(om)e(for)g
+(the)h(output.)150 4315 y Fl(asn1)p 396 4315 37 5 v 55
+w(o)s(ctet)p 722 4315 V 53 w(der)3350 4522 y Ft([F)-8
+b(unction])-3599 b Fk(void)54 b(asn1_octet_der)49 b Fj(\()p
+Fi(const)31 b(unsigned)f(c)m(har)g(*)h Fh(str)12 b Fi(,)31
+b(in)m(t)g Fh(str_len)12 b Fi(,)565 4631 y(unsigned)29
+b(c)m(har)i(*)g Fh(der)12 b Fi(,)31 b(in)m(t)g(*)g Fh(der_len)12
+b Fj(\))390 4741 y Fi(str)7 b Ft(:)40 b(OCTET)29 b(string.)390
+4885 y Fi(str)p 503 4885 28 4 v 40 w(len)p Ft(:)41 b(STR)29
+b(length)i(\(str[0]..str[str)p 1742 4885 V 41 w(len-1]\).)390
+5029 y Fi(der)7 b Ft(:)40 b(string)30 b(returned.)390
+5173 y Fi(der)p 523 5173 V 40 w(len)p Ft(:)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 5173 V 41 w(len-1]\).)390 5317 y(Creates)h(the)g(DER)f(co)s(ding)h
+(for)f(an)g(OCTET)f(t)m(yp)s(e)h(\(length)h(included\).)p
+eop end
+%%Page: 13 16
+TeXDict begin 13 15 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(13)150 299 y Fl(asn1)p
+396 299 37 5 v 55 w(bit)p 601 299 V 54 w(der)3350 488
+y Ft([F)-8 b(unction])-3599 b Fk(void)54 b(asn1_bit_der)49
+b Fj(\()p Fi(const)31 b(unsigned)e(c)m(har)i(*)g Fh(str)12
+b Fi(,)31 b(in)m(t)g Fh(bit_len)12 b Fi(,)32 b(unsigned)565
+598 y(c)m(har)f(*)g Fh(der)12 b Fi(,)31 b(in)m(t)g(*)f
+Fh(der_len)12 b Fj(\))390 707 y Fi(str)7 b Ft(:)40 b(BIT)30
+b(string.)390 838 y Fi(bit)p 507 838 28 4 v 40 w(len)p
+Ft(:)41 b(n)m(um)m(b)s(er)29 b(of)i(meaningful)f(bits)g(in)g(STR.)390
+969 y Fi(der)7 b Ft(:)40 b(string)30 b(returned.)390
+1100 y Fi(der)p 523 1100 V 40 w(len)p Ft(:)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 1100 V 41 w(len-1]\).)390 1231 y(Creates)h(the)g(DER)f(co)s(ding)h
+(for)f(a)g(BIT)h(STRING)e(t)m(yp)s(e)i(\(length)g(and)f(pad)g
+(included\).)150 1422 y Fl(asn1)p 396 1422 37 5 v 55
+w(der)p 625 1422 V 54 w(co)s(ding)3350 1612 y Ft([F)-8
+b(unction])-3599 b Fk(asn1_retCode)56 b(asn1_der_coding)50
+b Fj(\()p Fi(ASN1)p 1933 1612 28 4 v 41 w(TYPE)30 b Fh(element)12
+b Fi(,)32 b(const)f(c)m(har)f(*)565 1721 y Fh(name)12
+b Fi(,)31 b(v)m(oid)g(*)g Fh(ider)12 b Fi(,)31 b(in)m(t)g(*)g
+Fh(len)12 b Fi(,)31 b(c)m(har)g(*)g Fh(ErrorDescription)12
+b Fj(\))390 1831 y Fi(elemen)m(t)r Ft(:)42 b(p)s(oin)m(ter)31
+b(to)g(an)f(ASN1)h(elemen)m(t)390 1962 y Fi(name)5 b
+Ft(:)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
+2093 y Fi(ider)7 b Ft(:)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 2202 y(cells)i(already)g(allo)s(cated.)390
+2333 y Fi(len)p Ft(:)53 b(n)m(um)m(b)s(er)35 b(of)h(b)m(ytes)h(of)g(*)p
+Fm(ider)p Ft(:)52 b Fm(ider)p Ft([0]..)p Fm(ider)p Ft([len-1],)39
+b(Initialy)e(holds)f(the)g(sizeof)i(of)e(der)390 2442
+y(v)m(ector.)390 2573 y(Creates)31 b(the)g(DER)f(enco)s(ding)g(for)h
+(the)f(NAME)h(structure)f(\(inside)g(*POINTER)g(structure\).)390
+2704 y Fg(Returns:)150 2896 y Fl(asn1)p 396 2896 37 5
+v 55 w(get)p 616 2896 V 54 w(length)p 1005 2896 V 54
+w(der)3350 3085 y Ft([F)-8 b(unction])-3599 b Fk(signed)54
+b(long)g(asn1_get_length_der)d Fj(\()p Fi(const)31 b(unsigned)e(c)m
+(har)i(*)g Fh(der)12 b Fi(,)31 b(in)m(t)565 3195 y Fh(der_len)12
+b Fi(,)32 b(in)m(t)f(*)g Fh(len)12 b Fj(\))390 3304 y
+Fi(der)7 b Ft(:)40 b(DER)30 b(data)h(to)g(deco)s(de.)390
+3435 y Fi(der)p 523 3435 28 4 v 40 w(len)p Ft(:)40 b(Length)31
+b(of)f(DER)h(data)g(to)g(deco)s(de.)390 3566 y Fi(len)p
+Ft(:)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 3697 y(Extract)g(a)g(length)g
+(\014eld)f(from)g(DER)g(data.)390 3828 y Fg(Returns:)40
+b Ft(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
+3937 y(v)-5 b(alue)31 b(w)m(as)g(to)s(o)g(big.)150 4129
+y Fl(asn1)p 396 4129 37 5 v 55 w(get)p 616 4129 V 54
+w(tag)p 839 4129 V 53 w(der)3350 4318 y Ft([F)-8 b(unction])-3599
+b Fk(int)53 b(asn1_get_tag_der)e Fj(\()p Fi(const)31
+b(unsigned)e(c)m(har)i(*)g Fh(der)12 b Fi(,)31 b(in)m(t)f
+Fh(der_len)12 b Fi(,)565 4428 y(unsigned)29 b(c)m(har)i(*)g
+Fh(cls)12 b Fi(,)31 b(in)m(t)g(*)g Fh(len)12 b Fi(,)31
+b(unsigned)e(long)i(*)g Fh(tag)12 b Fj(\))390 4538 y
+Fi(der)7 b Ft(:)40 b(DER)30 b(data)h(to)g(deco)s(de.)390
+4668 y Fi(der)p 523 4668 28 4 v 40 w(len)p Ft(:)40 b(Length)31
+b(of)f(DER)h(data)g(to)g(deco)s(de.)390 4799 y Fi(cls)t
+Ft(:)41 b(Output)29 b(v)-5 b(ariable)31 b(con)m(taining)h(deco)s(ded)e
+(class.)390 4930 y Fi(len)p Ft(:)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 5061 y Fi(tag)8 b Ft(:)42 b(Output)29
+b(v)-5 b(ariable)31 b(con)m(taining)h(the)f(deco)s(ded)f(tag.)390
+5192 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 5322 y Fg(Returns:)40 b Ft(Returns)30
+b Fm(ASN1_SUCCESS)d Ft(on)j(success,)h(or)f(an)h(error.)p
+eop end
+%%Page: 14 17
+TeXDict begin 14 16 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(14)150 299 y Fl(asn1)p
+396 299 37 5 v 55 w(get)p 616 299 V 54 w(length)p 1005
+299 V 54 w(b)s(er)3350 521 y Ft([F)-8 b(unction])-3599
+b Fk(signed)54 b(long)g(asn1_get_length_ber)d Fj(\()p
+Fi(const)31 b(unsigned)e(c)m(har)i(*)g Fh(ber)12 b Fi(,)31
+b(in)m(t)565 630 y Fh(ber_len)12 b Fi(,)32 b(in)m(t)f(*)g
+Fh(len)12 b Fj(\))390 740 y Fi(b)s(er)7 b Ft(:)39 b(BER)31
+b(data)g(to)g(deco)s(de.)390 900 y Fi(b)s(er)p 526 900
+28 4 v 39 w(len)p Ft(:)41 b(Length)30 b(of)h(BER)f(data)h(to)g(deco)s
+(de.)390 1059 y Fi(len)p Ft(:)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.)390
+1219 y(Extract)g(a)g(length)f(\014eld)g(from)g(BER)g(data.)41
+b(The)30 b(di\013erence)h(to)g Fm(asn1_get_length_der\(\))24
+b Ft(is)390 1328 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 1488 y Fg(Returns:)40 b Ft(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
+1598 y(big.)390 1757 y Fg(Since:)41 b Ft(2.0)150 1981
+y Fl(asn1)p 396 1981 37 5 v 55 w(get)p 616 1981 V 54
+w(o)s(ctet)p 941 1981 V 53 w(der)3350 2203 y Ft([F)-8
+b(unction])-3599 b Fk(int)53 b(asn1_get_octet_der)e Fj(\()p
+Fi(const)31 b(unsigned)f(c)m(har)g(*)h Fh(der)12 b Fi(,)31
+b(in)m(t)g Fh(der_len)12 b Fi(,)32 b(in)m(t)565 2313
+y(*)f Fh(ret_len)12 b Fi(,)32 b(unsigned)d(c)m(har)i(*)g
+Fh(str)12 b Fi(,)31 b(in)m(t)g Fh(str_size)12 b Fi(,)32
+b(in)m(t)f(*)g Fh(str_len)12 b Fj(\))390 2423 y Fi(der)7
+b Ft(:)40 b(DER)30 b(data)h(to)g(deco)s(de)g(con)m(taining)h(the)e
+(OCTET)f(SEQUENCE.)390 2582 y Fi(der)p 523 2582 28 4
+v 40 w(len)p Ft(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g(deco)s(de.)
+390 2742 y Fi(ret)p 507 2742 V 40 w(len)p Ft(:)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 2901 y Fi(str)7 b Ft(:)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 3061 y Fi(str)p 503 3061 V 40 w(size)5 b Ft(:)41
+b(Length)31 b(of)f(pre-allo)s(cated)j(output)d(bu\013er.)390
+3220 y Fi(str)p 503 3220 V 40 w(len)p Ft(:)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 3380 y(Extract)i(an)g(OCTET)d(SEQUENCE)i(from)f(DER)i
+(data.)390 3540 y Fg(Returns:)40 b Ft(Returns)30 b Fm(ASN1_SUCCESS)d
+Ft(on)j(success,)h(or)f(an)h(error.)150 3764 y Fl(asn1)p
+396 3764 37 5 v 55 w(get)p 616 3764 V 54 w(bit)p 820
+3764 V 54 w(der)3350 3986 y Ft([F)-8 b(unction])-3599
+b Fk(int)53 b(asn1_get_bit_der)e Fj(\()p Fi(const)31
+b(unsigned)e(c)m(har)i(*)g Fh(der)12 b Fi(,)31 b(in)m(t)f
+Fh(der_len)12 b Fi(,)33 b(in)m(t)e(*)565 4096 y Fh(ret_len)12
+b Fi(,)32 b(unsigned)e(c)m(har)g(*)h Fh(str)12 b Fi(,)31
+b(in)m(t)g Fh(str_size)12 b Fi(,)33 b(in)m(t)d(*)h Fh(bit_len)12
+b Fj(\))390 4205 y Fi(der)7 b Ft(:)40 b(DER)30 b(data)h(to)g(deco)s(de)
+g(con)m(taining)h(the)e(BIT)h(SEQUENCE.)390 4365 y Fi(der)p
+523 4365 28 4 v 40 w(len)p Ft(:)40 b(Length)31 b(of)f(DER)h(data)g(to)g
+(deco)s(de.)390 4524 y Fi(ret)p 507 4524 V 40 w(len)p
+Ft(:)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 4684 y Fi(str)7 b Ft(:)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 4843 y Fi(str)p 503 4843 V
+40 w(size)5 b Ft(:)41 b(Length)31 b(of)f(pre-allo)s(cated)j(output)d
+(bu\013er.)390 5003 y Fi(bit)p 507 5003 V 40 w(len)p
+Ft(:)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 5163 y(Extract)h(a)g(BIT)f(SEQUENCE)f
+(from)h(DER)h(data.)390 5322 y Fg(Returns:)40 b Ft(Return)30
+b Fm(ASN1_SUCCESS)d Ft(on)j(success,)h(or)f(an)h(error.)p
+eop end
+%%Page: 15 18
+TeXDict begin 15 17 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(15)150 299 y Fl(asn1)p
+396 299 37 5 v 55 w(der)p 625 299 V 54 w(deco)s(ding)3350
+492 y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56
+b(asn1_der_decoding)51 b Fj(\()p Fi(ASN1)p 2038 492 28
+4 v 40 w(TYPE)30 b(*)h Fh(element)12 b Fi(,)32 b(const)565
+601 y(v)m(oid)f(*)g Fh(ider)12 b Fi(,)31 b(in)m(t)g Fh(len)12
+b Fi(,)31 b(c)m(har)g(*)g Fh(errorDescription)12 b Fj(\))390
+711 y Fi(elemen)m(t)r Ft(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h
+(structure.)390 844 y Fi(ider)7 b Ft(:)40 b(v)m(ector)32
+b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.)390 976
+y Fi(len)p Ft(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*)p
+Fm(ider)p Ft(:)40 b Fm(ider)p Ft([0]..)p Fm(ider)p Ft([len-1].)390
+1109 y Fi(errorDescription)p Ft(:)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
+1241 y(Fill)24 b(the)f(structure)f(*)p Fm(ELEMENT)f Ft(with)i(v)-5
+b(alues)23 b(of)g(a)g(DER)g(enco)s(ding)f(string.)39
+b(The)22 b(structure)g(m)m(ust)390 1351 y(just)27 b(b)s(e)g(created)i
+(with)e(function)g Fm(asn1_create_element\(\))p Ft(.)34
+b(If)27 b(an)h(error)f(o)s(ccurs)g(during)g(the)390 1461
+y(deco)s(ding)j(pro)s(cedure,)g(the)g(*)p Fm(ELEMENT)f
+Ft(is)i(deleted)g(and)f(set)g(equal)h(to)g Fm(ASN1_TYPE_EMPTY)p
+Ft(.)390 1593 y Fg(Returns:)39 b Fm(ASN1_SUCCESS)25 b
+Ft(if)i(DER)h(enco)s(ding)g(OK,)f Fm(ASN1_ELEMENT_NOT_FOUND)22
+b Ft(if)28 b Fm(ELEMENT)390 1703 y Ft(is)37 b Fm(ASN1_TYPE_EMPTY)p
+Ft(,)f(and)g Fm(ASN1_TAG_ERROR)e Ft(or)j Fm(ASN1_DER_ERROR)c
+Ft(if)38 b(the)f(der)g(enco)s(ding)390 1812 y(do)s(esn't)30
+b(matc)m(h)h(the)g(structure)f(name)g(\(*)p Fm(ELEMENT)f
+Ft(deleted\).)150 2008 y Fl(asn1)p 396 2008 37 5 v 55
+w(der)p 625 2008 V 54 w(deco)s(ding)p 1153 2008 V 55
+w(elemen)m(t)3350 2201 y Ft([F)-8 b(unction])-3599 b
+Fk(asn1_retCode)56 b(asn1_der_decoding_elem)q(ent)c Fj(\()p
+Fi(ASN1)p 2456 2201 28 4 v 41 w(TYPE)30 b(*)565 2310
+y Fh(structure)12 b Fi(,)33 b(const)e(c)m(har)g(*)f Fh(elementName)12
+b Fi(,)34 b(const)d(v)m(oid)g(*)f Fh(ider)12 b Fi(,)32
+b(in)m(t)f Fh(len)12 b Fi(,)31 b(c)m(har)f(*)565 2420
+y Fh(errorDescription)12 b Fj(\))390 2530 y Fi(structure)5
+b Ft(:)40 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h(structure)390
+2662 y Fi(elemen)m(tName)5 b Ft(:)43 b(name)31 b(of)f(the)h(elemen)m(t)
+g(to)h(\014ll)390 2795 y Fi(ider)7 b Ft(:)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.)390 2927 y Fi(len)p Ft(:)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
+3060 y Fi(errorDescription)p Ft(:)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
+3193 y(Fill)41 b(the)g(elemen)m(t)g(named)f Fm(ELEMENTNAME)d
+Ft(with)j(v)-5 b(alues)40 b(of)h(a)f(DER)g(enco)s(ding)g(string.)70
+b(The)390 3302 y(structure)40 b(m)m(ust)g(just)f(b)s(e)g(created)j
+(with)d(function)h Fm(asn1_create_element\(\))p Ft(.)64
+b(The)40 b(DER)390 3412 y(v)m(ector)35 b(m)m(ust)e(con)m(tain)h(the)f
+(enco)s(ding)h(string)f(of)g(the)g(whole)g Fm(STRUCTURE)p
+Ft(.)47 b(If)33 b(an)g(error)f(o)s(ccurs)390 3521 y(during)38
+b(the)i(deco)s(ding)f(pro)s(cedure,)i(the)f(*)p Fm(STRUCTURE)d
+Ft(is)j(deleted)g(and)f(set)h(equal)g(to)g Fm(ASN1_)390
+3631 y(TYPE_EMPTY)p Ft(.)390 3764 y Fg(Returns:)63 b
+Fm(ASN1_SUCCESS)39 b Ft(if)j(DER)g(enco)s(ding)g(OK,)f
+Fm(ASN1_ELEMENT_NOT_FOUND)36 b Ft(if)42 b(ELE-)390 3873
+y(MENT)h(is)g Fm(ASN1_TYPE_EMPTY)c Ft(or)j Fm(elementName)e
+Ft(==)j(NULL,)g(and)f Fm(ASN1_TAG_ERROR)d Ft(or)390 3983
+y Fm(ASN1_DER_ERROR)26 b Ft(if)k(the)g(der)f(enco)s(ding)h(do)s(esn't)f
+(matc)m(h)i(the)f(structure)f Fm(structure)e Ft(\(*ELE-)390
+4092 y(MENT)j(deleted\).)150 4288 y Fl(asn1)p 396 4288
+37 5 v 55 w(der)p 625 4288 V 54 w(deco)s(ding)p 1153
+4288 V 55 w(startEnd)3350 4481 y Ft([F)-8 b(unction])-3599
+b Fk(asn1_retCode)56 b(asn1_der_decoding_star)q(tEn)q(d)51
+b Fj(\()p Fi(ASN1)p 2508 4481 28 4 v 41 w(TYPE)565 4590
+y Fh(element)12 b Fi(,)32 b(const)f(v)m(oid)g(*)g Fh(ider)12
+b Fi(,)31 b(in)m(t)g Fh(len)12 b Fi(,)31 b(const)g(c)m(har)g(*)f
+Fh(name_element)12 b Fi(,)34 b(in)m(t)d(*)565 4700 y
+Fh(start)12 b Fi(,)32 b(in)m(t)f(*)f Fh(end)12 b Fj(\))390
+4810 y Fi(elemen)m(t)r Ft(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h
+(elemen)m(t)390 4942 y Fi(ider)7 b Ft(:)40 b(v)m(ector)32
+b(that)f(con)m(tains)g(the)g(DER)g(enco)s(ding.)390 5075
+y Fi(len)p Ft(:)41 b(n)m(um)m(b)s(er)29 b(of)h(b)m(ytes)h(of)g(*)p
+Fm(ider)p Ft(:)40 b Fm(ider)p Ft([0]..)p Fm(ider)p Ft([len-1])390
+5207 y Fi(name)p 608 5207 V 40 w(elemen)m(t)r Ft(:)i(an)31
+b(elemen)m(t)g(of)g(NAME)g(structure.)390 5340 y Fi(start)r
+Ft(:)41 b(the)31 b(p)s(osition)f(of)h(the)f(\014rst)g(b)m(yte)h(of)g
+(NAME)p 2189 5340 V 40 w(ELEMENT)f(deco)s(ding)g(\()p
+Fm(ider)p Ft([*start]\))p eop end
+%%Page: 16 19
+TeXDict begin 16 18 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(16)390 299 y Fi(end)t
+Ft(:)40 b(the)30 b(p)s(osition)h(of)f(the)h(last)g(b)m(yte)g(of)g(NAME)
+p 2129 299 28 4 v 40 w(ELEMENT)f(deco)s(ding)g(\()p Fm(ider)p
+Ft([*end]\))390 456 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 566 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 Fm(asn1_der_)390 675 y(decoding\(\))22 b
+Ft(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
+785 y(concerning)31 b(an)f(elemen)m(t)i(of)e(the)h(structure.)390
+942 y(One)f(example)h(is)f(the)h(sequence)g Fm(")p Ft(tbsCerti\014cate)
+p Fm(")g Ft(inside)f(an)g(X509)i(certi\014cate.)390 1099
+y Fg(Returns:)63 b Fm(ASN1_SUCCESS)39 b Ft(if)j(DER)g(enco)s(ding)g
+(OK,)f Fm(ASN1_ELEMENT_NOT_FOUND)36 b Ft(if)42 b(ELE-)390
+1209 y(MENT)37 b(is)g Fm(ASN1_TYPE)e Ft(EMPTY)h(or)h
+Fm(name_element)d Ft(is)j(not)g(a)h(v)-5 b(alid)37 b(elemen)m(t,)j
+Fm(ASN1_TAG_)390 1319 y(ERROR)j Ft(or)h Fm(ASN1_DER_ERROR)d
+Ft(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 1428 y(MENT.)150 1650 y Fl(asn1)p
+396 1650 37 5 v 55 w(expand)p 836 1650 V 54 w(an)m(y)p
+1080 1650 V 53 w(de\014ned)p 1517 1650 V 55 w(b)m(y)3350
+1870 y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56
+b(asn1_expand_any_define)q(d_b)q(y)51 b Fj(\()p Fi(ASN1)p
+2508 1870 28 4 v 41 w(TYPE)565 1979 y Fh(definitions)12
+b Fi(,)34 b(ASN1)p 1446 1979 V 40 w(TYPE)c(*)g Fh(element)12
+b Fj(\))390 2089 y Fi(de\014nitions)t Ft(:)40 b(ASN1)31
+b(de\014nitions)390 2246 y Fi(elemen)m(t)r Ft(:)42 b(p)s(oin)m(ter)31
+b(to)g(an)f(ASN1)h(structure)390 2403 y(Expands)36 b(ev)m(ery)j
+Fm(")p Ft(ANY)f(DEFINED)g(BY)p Fm(")g Ft(elemen)m(t)h(of)f(a)g
+(structure)g(created)g(from)g(a)g(DER)390 2513 y(deco)s(ding)c(pro)s
+(cess)g(\(asn1)p 1314 2513 V 41 w(der)p 1482 2513 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 2622 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 2732 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.)
+390 2889 y Fg(Returns:)55 b Fm(ASN1_SUCCESS)35 b Ft(if)j(Substitution)f
+(OK,)g Fm(ASN1_ERROR_TYPE_ANY)c Ft(if)k(some)i Fm(")p
+Ft(ANY)390 2999 y(DEFINED)34 b(BY)p Fm(")f Ft(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 2999 V 39 w(ID)g(-)p Fm(>)390 3108 y Ft(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 3330 y Fl(asn1)p 396 3330 37 5 v 55 w(expand)p
+836 3330 V 54 w(o)s(ctet)p 1161 3330 V 53 w(string)3350
+3550 y Ft([F)-8 b(unction])-3599 b Fk(asn1_retCode)56
+b(asn1_expand_octet_stri)q(ng)c Fj(\()p Fi(ASN1)p 2404
+3550 28 4 v 40 w(TYPE)565 3659 y Fh(definitions)12 b
+Fi(,)34 b(ASN1)p 1446 3659 V 40 w(TYPE)c(*)g Fh(element)12
+b Fi(,)33 b(const)e(c)m(har)f(*)h Fh(octetName)12 b Fi(,)33
+b(const)e(c)m(har)565 3769 y(*)g Fh(objectName)12 b Fj(\))390
+3879 y Fi(de\014nitions)t Ft(:)40 b(ASN1)31 b(de\014nitions)390
+4036 y Fi(elemen)m(t)r Ft(:)42 b(p)s(oin)m(ter)31 b(to)g(an)f(ASN1)h
+(structure)390 4193 y Fi(o)s(ctetName)5 b Ft(:)43 b(name)30
+b(of)h(the)g(OCTECT)d(STRING)i(\014eld)g(to)h(expand.)390
+4350 y Fi(ob)5 b(jectName)g Ft(:)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 4460 y(expansion.)390 4617 y(Expands)23 b(an)h
+Fm(")p Ft(OCTET)e(STRING)p Fm(")i Ft(elemen)m(t)h(of)g(a)f(structure)g
+(created)h(from)f(a)h(DER)f(deco)s(ding)390 4727 y(pro)s(cess)39
+b(\(the)h Fm(asn1_der_decoding\(\))34 b Ft(function\).)68
+b(The)39 b(t)m(yp)s(e)h(used)f(for)g(expansion)g(is)h(the)390
+4836 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
+4946 y(indicated)c(b)m(y)f(OBJECTNAME.)390 5103 y Fg(Returns:)36
+b Fm(ASN1_SUCCESS)18 b Ft(if)j(substitution)g(OK,)g Fm
+(ASN1_ELEMENT_NOT_FOUND)15 b Ft(if)22 b Fm(objectName)390
+5213 y Ft(or)j Fm(octetName)e Ft(are)j(not)f(correct,)j
+Fm(ASN1_VALUE_NOT_VALID)20 b Ft(if)25 b(it)h(w)m(asn't)g(p)s(ossible)f
+(to)h(\014nd)e(the)390 5322 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.)p eop end
+%%Page: 17 20
+TeXDict begin 17 19 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(17)150 299 y Fs(4.4)68
+b(Error)45 b(handling)g(functions)150 523 y Fl(asn1)p
+396 523 37 5 v 55 w(p)s(error)3350 742 y Ft([F)-8 b(unction])-3599
+b Fk(void)54 b(asn1_perror)48 b Fj(\()p Fi(asn1)p 1250
+742 28 4 v 41 w(retCo)s(de)30 b Fh(error)12 b Fj(\))390
+852 y Fi(error)7 b Ft(:)40 b(is)30 b(an)h(error)f(returned)f(b)m(y)h(a)
+h(libtasn1)g(function.)390 1009 y(Prin)m(ts)24 b(a)h(string)f(to)h
+(stderr)f(with)g(a)h(description)f(of)h(an)f(error.)38
+b(This)24 b(function)g(is)g(lik)m(e)i Fm(perror\(\))p
+Ft(.)390 1119 y(The)k(only)g(di\013erence)h(is)g(that)g(it)f(accepts)i
+(an)e(error)g(returned)g(b)m(y)g(a)h(libtasn1)g(function.)390
+1276 y(This)f(function)g(replaces)h Fm(libtasn1_perror\(\))25
+b Ft(in)31 b(older)f(libtasn1.)390 1433 y Fg(Since:)41
+b Ft(1.6)150 1655 y Fl(asn1)p 396 1655 37 5 v 55 w(strerror)3350
+1874 y Ft([F)-8 b(unction])-3599 b Fk(const)54 b(char)f(*)g
+(asn1_strerror)c Fj(\()p Fi(asn1)p 1773 1874 28 4 v 41
+w(retCo)s(de)30 b Fh(error)12 b Fj(\))390 1984 y Fi(error)7
+b Ft(:)40 b(is)30 b(an)h(error)f(returned)f(b)m(y)h(a)h(libtasn1)g
+(function.)390 2141 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 2251 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 2360 y(tion.)390 2517 y(This)e(function)g
+(replaces)h Fm(libtasn1_strerror\(\))25 b Ft(in)30 b(older)h(libtasn1.)
+390 2675 y Fg(Returns:)40 b Ft(P)m(oin)m(ter)32 b(to)f(static)h
+(zero-terminated)g(string)f(describing)f(error)g(co)s(de.)390
+2832 y Fg(Since:)41 b Ft(1.6)150 3054 y Fl(libtasn1)p
+580 3054 37 5 v 55 w(p)s(error)3350 3273 y Ft([F)-8 b(unction])-3599
+b Fk(void)54 b(libtasn1_perror)c Fj(\()p Fi(asn1)p 1460
+3273 28 4 v 40 w(retCo)s(de)30 b Fh(error)12 b Fj(\))390
+3383 y Fi(error)7 b Ft(:)40 b(is)30 b(an)h(error)f(returned)f(b)m(y)h
+(a)h(libtasn1)g(function.)390 3540 y(Prin)m(ts)24 b(a)h(string)f(to)h
+(stderr)f(with)g(a)h(description)f(of)h(an)f(error.)38
+b(This)24 b(function)g(is)g(lik)m(e)i Fm(perror\(\))p
+Ft(.)390 3649 y(The)k(only)g(di\013erence)h(is)g(that)g(it)f(accepts)i
+(an)e(error)g(returned)g(b)m(y)g(a)h(libtasn1)g(function.)390
+3807 y Fg(Deprecated:)42 b Ft(Use)30 b Fm(asn1_perror\(\))d
+Ft(instead.)150 4028 y Fl(libtasn1)p 580 4028 37 5 v
+55 w(strerror)3350 4248 y Ft([F)-8 b(unction])-3599 b
+Fk(const)54 b(char)f(*)g(libtasn1_strerror)e Fj(\()p
+Fi(asn1)p 1983 4248 28 4 v 40 w(retCo)s(de)30 b Fh(error)12
+b Fj(\))390 4357 y Fi(error)7 b Ft(:)40 b(is)30 b(an)h(error)f
+(returned)f(b)m(y)h(a)h(libtasn1)g(function.)390 4515
+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
+4624 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 4734 y(tion.)390 4891 y Fg(Returns:)40 b Ft(P)m(oin)m(ter)32
+b(to)f(static)h(zero-terminated)g(string)f(describing)f(error)g(co)s
+(de.)390 5048 y Fg(Deprecated:)42 b Ft(Use)30 b Fm(asn1_strerror\(\))d
+Ft(instead.)150 5314 y Fs(4.5)68 b(Auxilliary)46 b(functions)p
+eop end
+%%Page: 18 21
+TeXDict begin 18 20 bop 150 -116 a Ft(Chapter)30 b(4:)41
+b(F)-8 b(unction)31 b(reference)2313 b(18)150 299 y Fl(asn1)p
+396 299 37 5 v 55 w(\014nd)p 655 299 V 54 w(no)s(de)3350
+496 y Ft([F)-8 b(unction])-3599 b Fk(ASN1_TYPE)55 b(asn1_find_node)50
+b Fj(\()p Fi(ASN1)p 1724 496 28 4 v 40 w(TYPE)30 b Fh(pointer)12
+b Fi(,)33 b(const)d(c)m(har)h(*)565 605 y Fh(name)12
+b Fj(\))390 715 y Fi(p)s(oin)m(ter)7 b Ft(:)40 b(NODE)p
+1021 715 V 40 w(ASN)31 b(elemen)m(t)g(p)s(oin)m(ter.)390
+849 y Fi(name)5 b Ft(:)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 984 y(Searc)m(hes)j(for)e
+(an)h(elemen)m(t)i(called)f Fm(name)e Ft(starting)i(from)f
+Fm(pointer)p Ft(.)49 b(The)34 b(name)g(is)g(comp)s(osed)390
+1093 y(b)m(y)41 b(di\013eren)m(ts)h(iden)m(ti\014ers)g(separated)g(b)m
+(y)f(dots.)74 b(When)41 b(*)p Fm(pointer)f Ft(has)i(a)f(name,)k(the)d
+(\014rst)390 1203 y(iden)m(ti\014er)30 b(m)m(ust)f(b)s(e)g(the)h(name)g
+(of)f(*)p Fm(pointer)p Ft(,)g(otherwise)h(it)g(m)m(ust)g(b)s(e)f(the)g
+(name)h(of)g(one)g(c)m(hild)390 1313 y(of)h(*)p Fm(pointer)p
+Ft(.)390 1447 y Fg(Returns:)40 b Ft(the)31 b(searc)m(h)g(result,)f(or)h
+Fm(NULL)e Ft(if)h(not)h(found.)150 1646 y Fl(asn1)p 396
+1646 37 5 v 55 w(c)m(hec)m(k)p 744 1646 V 52 w(v)m(ersion)3350
+1843 y Ft([F)-8 b(unction])-3599 b Fk(const)54 b(char)f(*)g
+(asn1_check_version)e Fj(\()p Fi(const)31 b(c)m(har)g(*)g
+Fh(req_version)12 b Fj(\))390 1953 y Fi(req)p 520 1953
+28 4 v 40 w(v)m(ersion)p Ft(:)41 b(Required)30 b(v)m(ersion)h(n)m(um)m
+(b)s(er,)e(or)i Fm(NULL)p Ft(.)390 2087 y(Chec)m(k)c(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 2197 y(v)m(ersion)j(string;)g(return)d
+Fm(NULL)h Ft(if)h(the)h(condition)f(is)g(not)h(satis\014ed.)40
+b(If)27 b(a)i Fm(NULL)e Ft(is)h(passed)f(to)i(this)390
+2306 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.)390 2441 y(See)h
+Fm(ASN1_VERSION)c Ft(for)j(a)h(suitable)f Fm(req_version)e
+Ft(string.)390 2575 y Fg(Returns:)43 b Ft(V)-8 b(ersion)32
+b(string)g(of)g(run-time)f(library)-8 b(,)33 b(or)e Fm(NULL)g
+Ft(if)h(the)g(run-time)f(library)g(do)s(es)h(not)390
+2685 y(meet)f(the)g(required)e(v)m(ersion)i(n)m(um)m(b)s(er.)p
+eop end
+%%Page: 19 22
+TeXDict begin 19 21 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(19)150 299 y Fp(App)t(endix)52
+b(A)81 b(Cop)l(ying)52 b(Information)150 617 y Fs(A.1)67
+b(GNU)45 b(F)-11 b(ree)45 b(Do)t(cumen)l(tation)h(License)1359
+754 y Ft(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390
+886 y(Cop)m(yrigh)m(t)842 883 y(c)817 886 y Fq(\015)e
+Ft(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 995
+y Fm(http://fsf.org/)390 1214 y Ft(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
+1324 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 1456 y(0.)61 b(PREAMBLE)330
+1588 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
+1698 y(useful)29 b(do)s(cumen)m(t)h Fi(free)36 b Ft(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 1808 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 1917 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 2027
+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
+2136 y(made)30 b(b)m(y)h(others.)330 2268 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
+2378 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
+2488 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 2620 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
+2729 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
+2839 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 2948 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 3058 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 3168 y(w)m(orks)f(whose)h(purp)s(ose)d
+(is)j(instruction)f(or)g(reference.)199 3300 y(1.)61
+b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3432 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 3541
+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
+3651 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 3761 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
+3870 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 3980 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
+4089 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 4222 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 4331 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 4441
+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: 20 23
+TeXDict begin 20 22 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(20)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)53 b(of)g(suitable)h(formats)f(for)g(T)-8
+b(ransparen)m(t)53 b(copies)h(include)f(plain)g Ff(asci)r(i)g
+Ft(without)330 2585 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j
+(LaT)1759 2604 y(E)1810 2585 y(X)e(input)f(format,)j
+Fe(SGML)f Ft(or)f Fe(XML)g Ft(using)g(a)g(publicly)330
+2694 y(a)m(v)-5 b(ailable)42 b Fe(DTD)p Ft(,)g(and)d
+(standard-conforming)h(simple)g Fe(HTML)p Ft(,)g(P)m(ostScript)h(or)f
+Fe(PDF)g Ft(designed)330 2804 y(for)e(h)m(uman)g(mo)s(di\014cation.)65
+b(Examples)38 b(of)h(transparen)m(t)f(image)i(formats)e(include)g
+Fe(PNG)p Ft(,)h Fe(X)n(CF)330 2913 y Ft(and)h Fe(JPG)p
+Ft(.)g(Opaque)h(formats)g(include)f(proprietary)g(formats)h(that)h(can)
+f(b)s(e)f(read)g(and)h(edited)330 3023 y(only)54 b(b)m(y)f(proprietary)
+h(w)m(ord)f(pro)s(cessors,)59 b Fe(SGML)54 b Ft(or)f
+Fe(XML)h Ft(for)g(whic)m(h)f(the)h Fe(DTD)g Ft(and/or)330
+3133 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g(generally)i(a)m(v)-5
+b(ailable,)71 b(and)60 b(the)h(mac)m(hine-generated)j
+Fe(HTML)p Ft(,)330 3242 y(P)m(ostScript)31 b(or)f Fe(PDF)h
+Ft(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(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: 21 24
+TeXDict begin 21 23 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(21)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: 22 25
+TeXDict begin 22 24 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(22)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: 23 26
+TeXDict begin 23 25 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(23)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: 24 27
+TeXDict begin 24 26 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(24)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: 25 28
+TeXDict begin 25 27 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(25)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 Fm(http://www.gnu.org/copy)o(left)o(/)p
+Ft(.)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: 26 29
+TeXDict begin 26 28 bop 150 -116 a Ft(App)s(endix)29
+b(A:)h(Cop)m(ying)h(Information)2140 b(26)150 299 y Fs(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 Ft(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)88 b(your)40 b(name)9 b Fd(.)468
+767 y(Permission)42 b(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 Ft(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.")41 b(line)31 b(with)f(this:)547 1559
+y Fd(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g
+(titles)9 b Fd(,)41 b(with)547 1646 y(the)f(Front-Cover)i(Texts)e
+(being)g Fc(list)9 b Fd(,)40 b(and)g(with)g(the)g(Back-Cover)i(Texts)
+547 1733 y(being)e Fc(list)9 b Fd(.)275 1868 y Ft(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: 27 30
+TeXDict begin 27 29 bop 150 -116 a Ft(Concept)31 b(Index)2927
+b(27)150 299 y Fp(Concept)52 b(Index)150 638 y Fs(A)150
+757 y Fb(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 846 y(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 935 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(5)150 1023 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 1281 y Fs(F)150 1400 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(19)150 1489 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 1746 y Fs(H)150 1866 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(3)2025
+638 y Fs(M)2025 760 y Fb(Main)26 b(t)n(yp)r(e)f(ASN1)p
+2598 760 24 4 v 33 w(TYPE)18 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)45
+b Fb(3)2025 1023 y Fs(P)2025 1145 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 1408 y Fs(S)2025
+1530 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 1793 y Fs(T)2025 1915 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: 28 31
+TeXDict begin 28 30 bop 150 -116 a Ft(F)-8 b(unction)31
+b(and)f(Data)i(Index)2503 b(28)150 299 y Fp(F)-13 b(unction)52
+b(and)h(Data)i(Index)150 610 y Fs(A)150 735 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(7)150 826 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(13)150 917 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(18)150 1009 y Fd(asn1_copy_node)16 b Fa(:)g(:)d(:)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(:)43 b Fb(9)150 1100 y Fd
+(asn1_create_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(8)150 1191 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(8)150 1283 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(8)150 1374 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(13)150 1466 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(15)150
+1557 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(15)150
+1648 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(15)150
+1740 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(16)150
+1831 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(16)150 1922 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(18)150 2014 y Fd
+(asn1_find_structure_from_oid)15 b Fa(:)k(:)13 b(:)g(:)g(:)g(:)h(:)f(:)
+g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)41 b Fb(9)150 2105 y
+Fd(asn1_get_bit_der)9 b Fa(:)16 b(:)e(:)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(:)35 b Fb(14)150 2196 y Fd(asn1_get_length_ber)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(14)2025 610
+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(13)2025 698 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(14)2025 785 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(13)2025 873 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(12)2025
+960 y Fd(asn1_number_of_elements)10 b Fa(:)18 b(:)13
+b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+(:)f(:)g(:)37 b Fb(9)2025 1048 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(12)2025 1135 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(7)2025
+1223 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(7)2025 1310 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(17)2025 1398 y Fd(asn1_print_structure)18 b Fa(:)f(:)c(:)g(:)h
+(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+g(:)g(:)g(:)45 b Fb(8)2025 1486 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(12)2025 1573 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(11)2025 1661 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(17)2025 1748 y Fd(asn1_write_value)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(9)2025
+1992 y Fs(L)2025 2109 y Fd(libtasn1_perror)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(17)2025
+2196 y Fd(libtasn1_strerror)6 b Fa(:)17 b(:)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(:)33 b Fb(17)p eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/doc/libtasn1.texi b/doc/libtasn1.texi
new file mode 100644 (file)
index 0000000..be31881
--- /dev/null
@@ -0,0 +1,405 @@
+\input texinfo   @c -*-texinfo-*-
+@comment %**start of header
+@setfilename libtasn1.info
+@include version.texi
+@settitle GNU Libtasn1 @value{VERSION}
+
+@c Unify some of the indices.
+@syncodeindex tp fn
+@syncodeindex pg fn
+
+@comment %**end of header
+@copying
+This manual is for GNU Libtasn1
+(version @value{VERSION}, @value{UPDATED}),
+which is a library for Abstract Syntax Notation One (ASN.1) and
+Distinguish Encoding Rules (DER) manipulation.
+
+Copyright @copyright{} 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+@quotation
+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''.
+@end quotation
+@end copying
+
+@dircategory Software libraries
+@direntry
+* libtasn1: (libtasn1). Library for Abstract Syntax Notation One (ASN.1).
+@end direntry
+
+@titlepage
+@title Libtasn1
+@subtitle Abstract Syntax Notation One (ASN.1) library for the GNU system
+@subtitle for version @value{VERSION}, @value{UPDATED}
+@author Fabio Fiorina
+@author Simon Josefsson (@email{bug-gnutls@@gnu.org})
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top
+@top Libtasn1
+
+@insertcopying
+@end ifnottex
+
+@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.
+@end menu
+
+@node Introduction
+@chapter Introduction
+
+This document describes the Libtasn1 library developed for ASN.1
+(Abstract Syntax Notation One) structures management and DER
+(Distinguished Encoding Rules) encoding functions.
+
+The main features of this library are:
+
+@itemize @bullet
+
+@item On line ASN1 structure management that doesn't require any
+C code file generation.
+
+@item Off line ASN1 structure management with C code file generation
+containing an array.
+
+@item DER (Distinguish Encoding Rules) encoding.
+
+@item No limits for INTEGER and ENUMERATED values.
+
+@item 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.
+
+@item It's thread-safe.
+@cindex threads
+No global variables are used and multiple library handles and session
+handles may be used in parallel.
+
+@item It's portable.
+@cindex Porting
+It should work on all Unix like operating systems, including Windows.
+The library itself should be portable to any C89 system, not even
+POSIX is required.
+@end itemize
+
+@node ASN.1 structure handling
+@chapter ASN.1 structure handling
+
+@menu
+* ASN.1 syntax::
+* Naming::
+* Library Notes::
+* Future developments::
+@end menu
+
+@node ASN.1 syntax
+@section ASN.1 syntax
+
+@cindex ASN.1 schema
+
+The parser is case sensitive. The comments begin with "-- " and end at
+the end of lines.  An example is in "pkix.asn" file.  ASN.1
+definitions must have this syntax:
+
+@verbatim
+      definitions_name {<object definition>}
+
+      DEFINITIONS <EXPLICIT or IMPLICIT> TAGS ::=
+
+      BEGIN
+
+      <type and constants definitions>
+
+      END
+@end verbatim
+
+The token "::=" must be separate from others elements, so this is a
+wrong declaration:
+
+@example
+      ;; INCORRECT
+      Version ::=INTEGER
+@end example
+
+the correct form is:
+
+@example
+   Version ::= INTEGER
+@end example
+
+Here is the list of types that the parser can manage:
+
+@cindex Supported ASN.1 types, list of
+
+@itemize @bullet
+
+@item INTEGER
+@item ENUMERATED
+@item BOOLEAN
+@item OBJECT IDENTIFIER
+@item NULL
+@item BIT STRING
+@item OCTET STRING
+@item UTCTime
+@item GeneralizedTime
+@item GeneralString
+@item SEQUENCE
+@item SEQUENCE OF
+@item SET
+@item SET OF
+@item CHOICE
+@item ANY
+@item ANY DEFINED BY
+
+@end itemize
+
+This version doesn't manage REAL type. It doesn't allow the "EXPORT"
+and "IMPORT" sections too.
+
+The SIZE constraints are allowed, but no check is done on them.
+
+@node Naming
+@section Naming
+
+Consider this definition:
+
+@verbatim
+      Example { 1 2 3 4 }
+
+      DEFINITIONS EXPLICIT TAGS ::=
+
+      BEGIN
+
+      Group ::= SEQUENCE {
+         id   OBJECT IDENTIFIER,
+         value  Value
+      }
+
+      Value ::= SEQUENCE {
+         value1  INTEGER,
+         value2  BOOLEAN
+      }
+
+      END
+@end verbatim
+
+To identify the type 'Group' you have to use the null terminated
+string "Example.Group".  These strings are used in functions that are
+described below.
+
+Others examples:
+
+Field 'id' in 'Group' type : "Example.Group.id".
+
+Field 'value1' in field 'value' in type 'Group':
+"Example.Group.value.value1".
+
+Elements of structured types that don't have a name, receive the name
+"?1","?2", and so on.
+
+The name "?LAST" indicates the last element of a @code{SET_OF} or
+@code{SEQUENCE_OF}.
+
+@node Library Notes
+@section Library Notes
+
+@cindex Header file libtasn1.h
+
+The header file of this library is @file{libtasn1.h}.
+
+@cindex Main type ASN1_TYPE
+
+The main type used in it is @code{ASN1_TYPE}, and it's used to store
+the ASN.1 definitions and structures (instances).
+
+The constant @code{ASN1_TYPE_EMPTY} can be used for the variable
+initialization.  For example:
+
+@example
+ ASN1_TYPE definitions=ASN1_TYPE_EMPTY;
+@end example
+
+Some functions require a parameter named errorDescription of char*
+type.  The array must be already allocated and must have at least
+@code{ASN1_MAX_ERROR_DESCRIPTION_SIZE} bytes (E.g, as in @code{char
+Description[ASN1_MAX_ERROR_DESCRIPTION_SIZE];}).
+
+@code{ASN1_MAX_NAME_SIZE} indicates the maximum number of characters of a
+name inside a file with ASN1 definitions.
+
+@node Future developments
+@section Future developments
+@cindex Future developments
+
+@itemize @bullet
+
+@item Add functions for a C code file generation containing equivalent
+data structures (not a single array like now).
+
+@item Type REAL.
+
+@end itemize
+
+@node Utilities
+@chapter Utilities
+
+@menu
+* Invoking asn1Parser::
+* Invoking asn1Coding::
+* Invoking asn1Decoding::
+@end menu
+
+@node Invoking asn1Parser
+@section Invoking asn1Parser
+@cindex asn1Parser program
+
+@file{asn1Parser} reads one file with ASN1 definitions and generates a
+file with an array to use with libtasn1 functions.
+
+@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.
+@end verbatim
+
+@node Invoking asn1Coding
+@section Invoking asn1Coding
+@cindex asn1Coding program
+
+@file{asn1Coding} generates a DER encoding from a file with ASN1
+definitions and another one with assignments.
+
+The file with assignments must have this syntax:
+
+@verbatim
+InstanceName  Asn1Definition
+
+nameString  value
+
+nameString  value
+...
+@end verbatim
+
+The output file is a binary file with the DER encoding.
+
+@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.
+@end verbatim
+
+@node Invoking asn1Decoding
+@section Invoking asn1Decoding
+@cindex asn1Decoding program
+
+@file{asn1Decoding} generates an ASN1 structure from a file with ASN1
+definitions and a binary file with a DER encoding.
+
+@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.
+ -c : checks the syntax only.
+ -o file : output file.
+@end verbatim
+
+@node Function reference
+@chapter Function reference
+
+@menu
+* ASN.1 schema functions::
+* ASN.1 field functions::
+* DER functions::
+* Error handling functions::
+* Auxilliary functions::
+@end menu
+
+@node ASN.1 schema functions
+@section ASN.1 schema functions
+
+@include texi/ASN1.c.texi
+
+@node ASN.1 field functions
+@section ASN.1 field functions
+
+@include texi/structure.c.texi
+@include texi/element.c.texi
+
+@node DER functions
+@section DER functions
+
+@include texi/coding.c.texi
+@include texi/decoding.c.texi
+
+@node Error handling functions
+@section Error handling functions
+
+@include texi/errors.c.texi
+
+@node Auxilliary functions
+@section Auxilliary functions
+
+@include texi/parser_aux.c.texi
+@include texi/version.c.texi
+
+@node Copying Information
+@appendix Copying Information
+
+@menu
+* GNU Free Documentation License::   License for copying this manual.
+@end menu
+
+@node GNU Free Documentation License
+@appendixsec GNU Free Documentation License
+
+@cindex FDL, GNU Free Documentation License
+
+@include fdl-1.3.texi
+
+@node Concept Index
+@unnumbered Concept Index
+
+@printindex cp
+
+@node Function and Data Index
+@unnumbered Function and Data Index
+
+@printindex fn
+
+@bye
diff --git a/doc/man/asn1_array2tree.3 b/doc/man/asn1_array2tree.3
new file mode 100644 (file)
index 0000000..1b19c93
--- /dev/null
@@ -0,0 +1,38 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_array2tree" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_array2tree \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_array2tree(const ASN1_ARRAY_TYPE * " array ", ASN1_TYPE * " definitions ", char * " errorDescription ");"
+.SH ARGUMENTS
+.IP "const ASN1_ARRAY_TYPE * array" 12
+specify the array that contains ASN.1 declarations
+.IP "ASN1_TYPE * 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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_bit_der.3 b/doc/man/asn1_bit_der.3
new file mode 100644 (file)
index 0000000..db6550d
--- /dev/null
@@ -0,0 +1,39 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_bit_der" 3 "2.7" "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 the DER coding for a BIT STRING type (length and pad
+included).
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_check_version.3 b/doc/man/asn1_check_version.3
new file mode 100644 (file)
index 0000000..fe8b0d0
--- /dev/null
@@ -0,0 +1,39 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_check_version" 3 "2.7" "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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_copy_node.3 b/doc/man/asn1_copy_node.3
new file mode 100644 (file)
index 0000000..e9a60a6
--- /dev/null
@@ -0,0 +1,39 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_copy_node" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_copy_node \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_copy_node(ASN1_TYPE " dst ", const char * " dst_name ", ASN1_TYPE " src ", const char * " src_name ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE dst" 12
+Destination ASN1_TYPE node.
+.IP "const char * dst_name" 12
+Field name in destination node.
+.IP "ASN1_TYPE src" 12
+Source ASN1_TYPE node.
+.IP "const char * src_name" 12
+Field name in source node.
+.SH "DESCRIPTION"
+Create a deep copy of a ASN1_TYPE variable.
+.SH "RETURN VALUE"
+Return \fBASN1_SUCCESS\fP on success.
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_create_element.3 b/doc/man/asn1_create_element.3
new file mode 100644 (file)
index 0000000..b589c16
--- /dev/null
@@ -0,0 +1,40 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_create_element" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_create_element \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_create_element(ASN1_TYPE " definitions ", const char * " source_name ", ASN1_TYPE * " element ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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_TYPE * 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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_delete_element.3 b/doc/man/asn1_delete_element.3
new file mode 100644 (file)
index 0000000..256074f
--- /dev/null
@@ -0,0 +1,35 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_delete_element" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_delete_element \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_delete_element(ASN1_TYPE " structure ", const char * " element_name ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_delete_structure.3 b/doc/man/asn1_delete_structure.3
new file mode 100644 (file)
index 0000000..f5fe576
--- /dev/null
@@ -0,0 +1,33 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_delete_structure" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_delete_structure \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_delete_structure(ASN1_TYPE * " structure ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE * 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 ASN1_TYPE_EMPTY.
+.SH "RETURNS"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_der_coding.3 b/doc/man/asn1_der_coding.3
new file mode 100644 (file)
index 0000000..2fd796a
--- /dev/null
@@ -0,0 +1,43 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_der_coding" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_der_coding \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_der_coding(ASN1_TYPE " element ", const char * " name ", void * " ider ", int * " len ", char * " ErrorDescription ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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
+.SH "DESCRIPTION"
+Creates the DER encoding for the NAME structure (inside *POINTER
+structure).
+.SH "RETURNS"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_der_decoding.3 b/doc/man/asn1_der_decoding.3
new file mode 100644 (file)
index 0000000..afe1fc4
--- /dev/null
@@ -0,0 +1,47 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_der_decoding" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_der_decoding \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_der_decoding(ASN1_TYPE * " element ", const void * " ider ", int " len ", char * " errorDescription ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE * element" 12
+pointer to an ASN1 structure.
+.IP "const void * ider" 12
+vector that contains the DER encoding.
+.IP "int 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.  If an error occurs during the decoding
+procedure, the *\fIELEMENT\fP is deleted and set equal to
+\fBASN1_TYPE_EMPTY\fP.
+.SH "RETURNS"
+\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP
+if \fIELEMENT\fP is \fBASN1_TYPE_EMPTY\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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_der_decoding_element.3 b/doc/man/asn1_der_decoding_element.3
new file mode 100644 (file)
index 0000000..8ddfd48
--- /dev/null
@@ -0,0 +1,50 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_der_decoding_element" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_der_decoding_element \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_der_decoding_element(ASN1_TYPE * " structure ", const char * " elementName ", const void * " ider ", int " len ", char * " errorDescription ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE * 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
+\fBASN1_TYPE_EMPTY\fP.
+.SH "RETURNS"
+\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP
+if ELEMENT is \fBASN1_TYPE_EMPTY\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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_der_decoding_startEnd.3 b/doc/man/asn1_der_decoding_startEnd.3
new file mode 100644 (file)
index 0000000..2d3be57
--- /dev/null
@@ -0,0 +1,55 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_der_decoding_startEnd" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_der_decoding_startEnd \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_der_decoding_startEnd(ASN1_TYPE " element ", const void * " ider ", int " len ", const char * " name_element ", int * " start ", int * " end ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE element" 12
+pointer to an ASN1 element
+.IP "const void * ider" 12
+vector that contains the DER encoding.
+.IP "int 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.
+.SH "RETURNS"
+\fBASN1_SUCCESS\fP if DER encoding OK, \fBASN1_ELEMENT_NOT_FOUND\fP
+if ELEMENT is \fBASN1_TYPE\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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_expand_any_defined_by.3 b/doc/man/asn1_expand_any_defined_by.3
new file mode 100644 (file)
index 0000000..9aa2606
--- /dev/null
@@ -0,0 +1,42 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_expand_any_defined_by" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_expand_any_defined_by \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_expand_any_defined_by(ASN1_TYPE " definitions ", ASN1_TYPE * " element ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE definitions" 12
+ASN1 definitions
+.IP "ASN1_TYPE * 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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_expand_octet_string.3 b/doc/man/asn1_expand_octet_string.3
new file mode 100644 (file)
index 0000000..e68e484
--- /dev/null
@@ -0,0 +1,46 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_expand_octet_string" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_expand_octet_string \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_expand_octet_string(ASN1_TYPE " definitions ", ASN1_TYPE * " element ", const char * " octetName ", const char * " objectName ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE definitions" 12
+ASN1 definitions
+.IP "ASN1_TYPE * 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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_find_node.3 b/doc/man/asn1_find_node.3
new file mode 100644 (file)
index 0000000..5d9ff17
--- /dev/null
@@ -0,0 +1,38 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_find_node" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_find_node \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "ASN1_TYPE asn1_find_node(ASN1_TYPE " pointer ", const char * " name ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_find_structure_from_oid.3 b/doc/man/asn1_find_structure_from_oid.3
new file mode 100644 (file)
index 0000000..a1b2907
--- /dev/null
@@ -0,0 +1,37 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_find_structure_from_oid" 3 "2.7" "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_TYPE " definitions ", const char * " oidValue ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_get_bit_der.3 b/doc/man/asn1_get_bit_der.3
new file mode 100644 (file)
index 0000000..c671c58
--- /dev/null
@@ -0,0 +1,43 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_get_bit_der" 3 "2.7" "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"
+Return \fBASN1_SUCCESS\fP on success, or an error.
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_get_length_ber.3 b/doc/man/asn1_get_length_ber.3
new file mode 100644 (file)
index 0000000..b8a1800
--- /dev/null
@@ -0,0 +1,42 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_get_length_ber" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_get_length_ber \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "signed 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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_get_length_der.3 b/doc/man/asn1_get_length_der.3
new file mode 100644 (file)
index 0000000..702efa5
--- /dev/null
@@ -0,0 +1,38 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_get_length_der" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_get_length_der \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "signed 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.
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_get_octet_der.3 b/doc/man/asn1_get_octet_der.3
new file mode 100644 (file)
index 0000000..d610d9a
--- /dev/null
@@ -0,0 +1,43 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_get_octet_der" 3 "2.7" "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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_get_tag_der.3 b/doc/man/asn1_get_tag_der.3
new file mode 100644 (file)
index 0000000..f5b9d50
--- /dev/null
@@ -0,0 +1,41 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_get_tag_der" 3 "2.7" "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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_length_der.3 b/doc/man/asn1_length_der.3
new file mode 100644 (file)
index 0000000..b3a9493
--- /dev/null
@@ -0,0 +1,36 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_length_der" 3 "2.7" "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 * " ans ", int * " ans_len ");"
+.SH ARGUMENTS
+.IP "unsigned long int len" 12
+value to convert.
+.IP "unsigned char * ans" 12
+string returned.
+.IP "int * ans_len" 12
+number of meaningful bytes of ANS (ans[0]..ans[ans_len\-1]).
+.SH "DESCRIPTION"
+Creates the DER coding for the LEN parameter (only the length).
+The \fIans\fP buffer is pre\-allocated and must have room for the output.
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_number_of_elements.3 b/doc/man/asn1_number_of_elements.3
new file mode 100644 (file)
index 0000000..18bf0cb
--- /dev/null
@@ -0,0 +1,37 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_number_of_elements" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_number_of_elements \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_number_of_elements(ASN1_TYPE " element ", const char * " name ", int * " num ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_octet_der.3 b/doc/man/asn1_octet_der.3
new file mode 100644 (file)
index 0000000..68bf27a
--- /dev/null
@@ -0,0 +1,37 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_octet_der" 3 "2.7" "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
+OCTET string.
+.IP "int str_len" 12
+STR length (str[0]..str[str_len\-1]).
+.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 the DER coding for an OCTET type (length included).
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_parser2array.3 b/doc/man/asn1_parser2array.3
new file mode 100644 (file)
index 0000000..8bd5ae0
--- /dev/null
@@ -0,0 +1,46 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_parser2array" 3 "2.7" "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 * " errorDescription ");"
+.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 * errorDescription" 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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_parser2tree.3 b/doc/man/asn1_parser2tree.3
new file mode 100644 (file)
index 0000000..c032796
--- /dev/null
@@ -0,0 +1,40 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_parser2tree" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_parser2tree \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_parser2tree(const char * " file_name ", ASN1_TYPE * " definitions ", char * " errorDescription ");"
+.SH ARGUMENTS
+.IP "const char * file_name" 12
+specify the path and the name of file that contains
+ASN.1 declarations.
+.IP "ASN1_TYPE * definitions" 12
+return the pointer to the structure created from
+"file_name" ASN.1 declarations.
+.IP "char * errorDescription" 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_name\fP file.
+.SH "RETURNS"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_perror.3 b/doc/man/asn1_perror.3
new file mode 100644 (file)
index 0000000..9caf2ba
--- /dev/null
@@ -0,0 +1,37 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_perror" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_perror \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "void asn1_perror(asn1_retCode " error ");"
+.SH ARGUMENTS
+.IP "asn1_retCode 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.
+
+This function replaces \fBlibtasn1_perror()\fP in older libtasn1.
+.SH "SINCE"
+1.6
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_print_structure.3 b/doc/man/asn1_print_structure.3
new file mode 100644 (file)
index 0000000..aeeeb27
--- /dev/null
@@ -0,0 +1,40 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_print_structure" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_print_structure \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "void asn1_print_structure(FILE * " out ", ASN1_TYPE " structure ", const char * " name ", int " mode ");"
+.SH ARGUMENTS
+.IP "FILE * out" 12
+pointer to the output file (e.g. stdout).
+.IP "ASN1_TYPE 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, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_read_tag.3 b/doc/man/asn1_read_tag.3
new file mode 100644 (file)
index 0000000..c37eb16
--- /dev/null
@@ -0,0 +1,42 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_read_tag" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_read_tag \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_read_tag(ASN1_TYPE " root ", const char * " name ", int * " tagValue ", int * " classValue ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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.
+.SH "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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_read_value.3 b/doc/man/asn1_read_value.3
new file mode 100644 (file)
index 0000000..656f679
--- /dev/null
@@ -0,0 +1,83 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_read_value" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_read_value \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_read_value(ASN1_TYPE " root ", const char * " name ", void * " ivalue ", int * " len ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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.
+.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 the function "read_value" 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.
+.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.
+.SH "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.
+.SH "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.
+.SH "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"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_strerror.3 b/doc/man/asn1_strerror.3
new file mode 100644 (file)
index 0000000..9a48c75
--- /dev/null
@@ -0,0 +1,40 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_strerror" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_strerror \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "const char * asn1_strerror(asn1_retCode " error ");"
+.SH ARGUMENTS
+.IP "asn1_retCode 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.
+
+This function replaces \fBlibtasn1_strerror()\fP in older libtasn1.
+.SH "RETURNS"
+Pointer to static zero\-terminated string describing error
+code.
+.SH "SINCE"
+1.6
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/asn1_write_value.3 b/doc/man/asn1_write_value.3
new file mode 100644 (file)
index 0000000..4644bee
--- /dev/null
@@ -0,0 +1,130 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "asn1_write_value" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+asn1_write_value \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "asn1_retCode asn1_write_value(ASN1_TYPE " node_root ", const char * " name ", const void * " ivalue ", int " len ");"
+.SH ARGUMENTS
+.IP "ASN1_TYPE 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);
+.SH "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.
+.SH "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
+.SH "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
+.SH "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.
+.SH "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);
+.SH "SET OF"
+the same as SEQUENCE OF.  Using "pkix.asn":
+
+result=asn1_write_value(cert,
+"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1);
+.SH "RETURNS"
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/libtasn1_perror.3 b/doc/man/libtasn1_perror.3
new file mode 100644 (file)
index 0000000..23609aa
--- /dev/null
@@ -0,0 +1,35 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "libtasn1_perror" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+libtasn1_perror \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "void libtasn1_perror(asn1_retCode " error ");"
+.SH ARGUMENTS
+.IP "asn1_retCode 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 "DEPRECATED"
+Use \fBasn1_perror()\fP instead.
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/man/libtasn1_strerror.3 b/doc/man/libtasn1_strerror.3
new file mode 100644 (file)
index 0000000..845ed84
--- /dev/null
@@ -0,0 +1,38 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by gdoc.
+.TH "libtasn1_strerror" 3 "2.7" "libtasn1" "libtasn1"
+.SH NAME
+libtasn1_strerror \- API function
+.SH SYNOPSIS
+.B #include <libtasn1.h>
+.sp
+.BI "const char * libtasn1_strerror(asn1_retCode " error ");"
+.SH ARGUMENTS
+.IP "asn1_retCode 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 "DEPRECATED"
+Use \fBasn1_strerror()\fP instead.
+.SH COPYRIGHT
+Copyright \(co 2006, 2007, 2008, 2009, 2010 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.
diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am
new file mode 100644 (file)
index 0000000..2c382f6
--- /dev/null
@@ -0,0 +1,101 @@
+## Process this file with automake to produce Makefile.in
+
+# 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, relative to $(srcdir).
+# gtk-doc will search all .c and .h files beneath these paths
+# for inline comments documenting functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk
+DOC_SOURCE_DIR=../../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 \
+       --deprecated-guards=ASN1_DISABLE_DEPRECATED
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS=--sgml-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 to ignore when scanning. Use base file name, no paths
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES=int.h parser_aux.h structure.h element.h gstr.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=
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+include $(top_srcdir)/gtk-doc.make
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST +=
+
+# 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 your docs-status tested during 'make check'
+if ENABLE_GTK_DOC
+#TESTS_ENVIRONMENT = cd $(srcsrc) &&
+#TESTS = $(GTKDOC_CHECK)
+endif
diff --git a/doc/reference/Makefile.in b/doc/reference/Makefile.in
new file mode 100644 (file)
index 0000000..e24f869
--- /dev/null
@@ -0,0 +1,1028 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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@
+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@
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(top_srcdir)/gtk-doc.make
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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, relative to $(srcdir).
+# gtk-doc will search all .c and .h files beneath these paths
+# for inline comments documenting functions and macros.
+# e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk
+DOC_SOURCE_DIR = ../../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 \
+       --deprecated-guards=ASN1_DISABLE_DEPRECATED
+
+
+# Extra options to supply to gtkdoc-mkdb.
+# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
+MKDB_OPTIONS = --sgml-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 to ignore when scanning. Use base file name, no paths
+# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
+IGNORE_HFILES = int.h parser_aux.h structure.h element.h gstr.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+@GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+@GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(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)
+
+# This includes the standard gtk-doc make rules, copied by gtkdocize.
+
+# Other files to distribute
+# e.g. EXTRA_DIST += version.xml.in
+EXTRA_DIST = $(content_files) $(HTML_IMAGES) $(DOC_MAIN_SGML_FILE) \
+       $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+DOC_STAMPS = scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+       pdf-build.stamp \
+       $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp \
+       $(srcdir)/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
+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
+.PRECIOUS: 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
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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 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 uninstall uninstall-am \
+       uninstall-local
+
+
+@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
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+       @echo 'gtk-doc: Scanning header files'
+       @-chmod -R u+w $(srcdir)
+       @_source_dir='' ; for i in $(DOC_SOURCE_DIR) ; do \
+           _source_dir="$${_source_dir} --source-dir=$$i" ; \
+         done ; \
+         cd $(srcdir) && \
+         gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+       @if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+       else \
+           cd $(srcdir) ; \
+           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: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+       @echo 'gtk-doc: Rebuilding template files'
+       @-chmod -R u+w $(srcdir)
+       @cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       @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 'gtk-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 ; \
+         cd $(srcdir) && \
+         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 'gtk-doc: Building HTML'
+       @-chmod -R u+w $(srcdir)
+       @rm -rf $(srcdir)/html
+       @mkdir $(srcdir)/html
+       @mkhtml_options=""; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options=--path="$(srcdir)"; \
+       fi; \
+       cd $(srcdir)/html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       @test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+       @echo 'gtk-doc: Fixing cross-references'
+       @cd $(srcdir) && 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 'gtk-doc: Building PDF'
+       @-chmod -R u+w $(srcdir)
+       @rm -rf $(srcdir)/$(DOC_MODULE).pdf
+       @mkpdf_imgdirs=""; \
+       if test "x$(HTML_IMAGES)" != "x"; then \
+         for img in $(HTML_IMAGES); do \
+           part=`dirname $$img`; \
+           echo $$mkpdf_imgdirs | grep >/dev/null "\-\-imgdir=$$part "; \
+           if test $$? != 0; then \
+             mkpdf_imgdirs="$$mkpdf_imgdirs --imgdir=$$part"; \
+           fi; \
+         done; \
+       fi; \
+       cd $(srcdir) && gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_imgdirs $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+       @touch pdf-build.stamp
+
+##############
+
+clean-local:
+       rm -f *~ *.bak
+       rm -rf .libs
+
+distclean-local:
+       cd $(srcdir) && \
+         rm -rf xml $(REPORT_FILES) $(DOC_MODULE).pdf \
+                $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+       cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+       @installfiles=`echo $(srcdir)/html/*`; \
+       if test "$$installfiles" = '$(srcdir)/html/*'; \
+       then echo '-- 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 '-- Installing '$$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; \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp; \
+         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 $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       cp $(srcdir)/html/* $(distdir)/html
+       -cp $(srcdir)/$(DOC_MODULE).pdf $(distdir)/
+       -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+       -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+       cd $(distdir) && rm -f $(DISTCLEANFILES)
+       $(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
+
+# 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 your docs-status tested during 'make check'
+#TESTS_ENVIRONMENT = cd $(srcsrc) &&
+#TESTS = $(GTKDOC_CHECK)
+
+# 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/ch01.html b/doc/reference/html/ch01.html
new file mode 100644 (file)
index 0000000..5b075f4
--- /dev/null
@@ -0,0 +1,43 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<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.14 (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="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GNU Libtasn1 API Reference Manual</th>
+<td><a accesskey="n" href="libtasn1-libtasn1.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter" title="GNU Libtasn1 API Reference Manual">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id3097396"></a>GNU Libtasn1 API Reference Manual</h2></div></div></div>
+<div class="toc"><dl><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="http://www.gnu.org/software/libtasn1/" target="_top">
+       http://www.gnu.org/software/libtasn1/</a>.
+    </p>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.14</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/reference/html/home.png b/doc/reference/html/home.png
new file mode 100644 (file)
index 0000000..1700361
Binary files /dev/null and b/doc/reference/html/home.png differ
diff --git a/doc/reference/html/index.html b/doc/reference/html/index.html
new file mode 100644 (file)
index 0000000..8819ac1
--- /dev/null
@@ -0,0 +1,33 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual">
+<link rel="next" href="ch01.html" title="GNU Libtasn1 API Reference Manual">
+<meta name="generator" content="GTK-Doc V1.14 (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" title="GNU Libtasn1 API Reference Manual">
+<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>
+<hr>
+</div>
+<div class="toc"><dl>
+<dt><span class="chapter"><a href="ch01.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="ix01.html">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.14</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 (file)
index 0000000..e1a4fd5
--- /dev/null
@@ -0,0 +1,88 @@
+<ANCHOR id="libtasn1-libtasn1" href="libtasn1/libtasn1-libtasn1.html">
+<ANCHOR id="libtasn1-libtasn1.synopsis" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.synopsis">
+<ANCHOR id="libtasn1-libtasn1.description" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.description">
+<ANCHOR id="libtasn1-libtasn1.details" href="libtasn1/libtasn1-libtasn1.html#libtasn1-libtasn1.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-retCode" href="libtasn1/libtasn1-libtasn1.html#asn1-retCode">
+<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="node-asn" href="libtasn1/libtasn1-libtasn1.html#node-asn">
+<ANCHOR id="ASN1-TYPE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TYPE:CAPS">
+<ANCHOR id="ASN1-TYPE-EMPTY:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS">
+<ANCHOR id="ASN1-ARRAY-TYPE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS">
+<ANCHOR id="ASN1-MAX-NAME-SIZE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS">
+<ANCHOR id="ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS" href="libtasn1/libtasn1-libtasn1.html#ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS">
+<ANCHOR id="asn1-parser2tree" href="libtasn1/libtasn1-libtasn1.html#asn1-parser2tree">
+<ANCHOR id="asn1-parser2array" href="libtasn1/libtasn1-libtasn1.html#asn1-parser2array">
+<ANCHOR id="asn1-array2tree" href="libtasn1/libtasn1-libtasn1.html#asn1-array2tree">
+<ANCHOR id="asn1-print-structure" href="libtasn1/libtasn1-libtasn1.html#asn1-print-structure">
+<ANCHOR id="asn1-create-element" href="libtasn1/libtasn1-libtasn1.html#asn1-create-element">
+<ANCHOR id="asn1-delete-structure" href="libtasn1/libtasn1-libtasn1.html#asn1-delete-structure">
+<ANCHOR id="asn1-delete-element" href="libtasn1/libtasn1-libtasn1.html#asn1-delete-element">
+<ANCHOR id="asn1-write-value" href="libtasn1/libtasn1-libtasn1.html#asn1-write-value">
+<ANCHOR id="asn1-read-value" href="libtasn1/libtasn1-libtasn1.html#asn1-read-value">
+<ANCHOR id="asn1-number-of-elements" href="libtasn1/libtasn1-libtasn1.html#asn1-number-of-elements">
+<ANCHOR id="asn1-der-coding" href="libtasn1/libtasn1-libtasn1.html#asn1-der-coding">
+<ANCHOR id="asn1-der-decoding" href="libtasn1/libtasn1-libtasn1.html#asn1-der-decoding">
+<ANCHOR id="asn1-der-decoding-element" href="libtasn1/libtasn1-libtasn1.html#asn1-der-decoding-element">
+<ANCHOR id="asn1-der-decoding-startEnd" href="libtasn1/libtasn1-libtasn1.html#asn1-der-decoding-startEnd">
+<ANCHOR id="asn1-expand-any-defined-by" href="libtasn1/libtasn1-libtasn1.html#asn1-expand-any-defined-by">
+<ANCHOR id="asn1-expand-octet-string" href="libtasn1/libtasn1-libtasn1.html#asn1-expand-octet-string">
+<ANCHOR id="asn1-read-tag" href="libtasn1/libtasn1-libtasn1.html#asn1-read-tag">
+<ANCHOR id="asn1-find-structure-from-oid" href="libtasn1/libtasn1-libtasn1.html#asn1-find-structure-from-oid">
+<ANCHOR id="asn1-check-version" href="libtasn1/libtasn1-libtasn1.html#asn1-check-version">
+<ANCHOR id="asn1-strerror" href="libtasn1/libtasn1-libtasn1.html#asn1-strerror">
+<ANCHOR id="asn1-perror" href="libtasn1/libtasn1-libtasn1.html#asn1-perror">
+<ANCHOR id="asn1-get-tag-der" href="libtasn1/libtasn1-libtasn1.html#asn1-get-tag-der">
+<ANCHOR id="asn1-octet-der" href="libtasn1/libtasn1-libtasn1.html#asn1-octet-der">
+<ANCHOR id="asn1-get-octet-der" href="libtasn1/libtasn1-libtasn1.html#asn1-get-octet-der">
+<ANCHOR id="asn1-bit-der" href="libtasn1/libtasn1-libtasn1.html#asn1-bit-der">
+<ANCHOR id="asn1-get-bit-der" href="libtasn1/libtasn1-libtasn1.html#asn1-get-bit-der">
+<ANCHOR id="asn1-get-length-der" href="libtasn1/libtasn1-libtasn1.html#asn1-get-length-der">
+<ANCHOR id="asn1-get-length-ber" href="libtasn1/libtasn1-libtasn1.html#asn1-get-length-ber">
+<ANCHOR id="asn1-length-der" href="libtasn1/libtasn1-libtasn1.html#asn1-length-der">
+<ANCHOR id="asn1-find-node" href="libtasn1/libtasn1-libtasn1.html#asn1-find-node">
+<ANCHOR id="asn1-copy-node" href="libtasn1/libtasn1-libtasn1.html#asn1-copy-node">
+<ANCHOR id="LIBTASN1-VERSION:CAPS" href="libtasn1/libtasn1-libtasn1.html#LIBTASN1-VERSION:CAPS">
+<ANCHOR id="MAX-NAME-SIZE:CAPS" href="libtasn1/libtasn1-libtasn1.html#MAX-NAME-SIZE:CAPS">
+<ANCHOR id="MAX-ERROR-DESCRIPTION-SIZE:CAPS" href="libtasn1/libtasn1-libtasn1.html#MAX-ERROR-DESCRIPTION-SIZE:CAPS">
+<ANCHOR id="libtasn1-strerror" href="libtasn1/libtasn1-libtasn1.html#libtasn1-strerror">
+<ANCHOR id="libtasn1-perror" href="libtasn1/libtasn1-libtasn1.html#libtasn1-perror">
diff --git a/doc/reference/html/ix01.html b/doc/reference/html/ix01.html
new file mode 100644 (file)
index 0000000..814a70c
--- /dev/null
@@ -0,0 +1,218 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<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.14 (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="2"><tr valign="middle">
+<td><a accesskey="p" href="libtasn1-libtasn1.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GNU Libtasn1 API Reference Manual</th>
+<td><a accesskey="n" href="ix02.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index" title="Index">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id3071767"></a>Index</h2></div></div></div>
+<div class="index">
+<div class="indexdiv">
+<h3>A</h3>
+<dl>
+<dt>ASN1_API, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-API:CAPS">ASN1_API</a>
+</dt>
+<dt>asn1_array2tree, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-array2tree">asn1_array2tree ()</a>
+</dt>
+<dt>ASN1_ARRAY_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS">ASN1_ARRAY_ERROR</a>
+</dt>
+<dt>ASN1_ARRAY_TYPE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS">ASN1_ARRAY_TYPE</a>
+</dt>
+<dt>asn1_bit_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-bit-der">asn1_bit_der ()</a>
+</dt>
+<dt>asn1_check_version, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-check-version">asn1_check_version ()</a>
+</dt>
+<dt>ASN1_CLASS_APPLICATION, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS">ASN1_CLASS_APPLICATION</a>
+</dt>
+<dt>ASN1_CLASS_CONTEXT_SPECIFIC, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS">ASN1_CLASS_CONTEXT_SPECIFIC</a>
+</dt>
+<dt>ASN1_CLASS_PRIVATE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS">ASN1_CLASS_PRIVATE</a>
+</dt>
+<dt>ASN1_CLASS_STRUCTURED, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS">ASN1_CLASS_STRUCTURED</a>
+</dt>
+<dt>ASN1_CLASS_UNIVERSAL, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS">ASN1_CLASS_UNIVERSAL</a>
+</dt>
+<dt>asn1_copy_node, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-copy-node">asn1_copy_node ()</a>
+</dt>
+<dt>asn1_create_element, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-create-element">asn1_create_element ()</a>
+</dt>
+<dt>asn1_delete_element, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-delete-element">asn1_delete_element ()</a>
+</dt>
+<dt>asn1_delete_structure, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-delete-structure">asn1_delete_structure ()</a>
+</dt>
+<dt>asn1_der_coding, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-der-coding">asn1_der_coding ()</a>
+</dt>
+<dt>asn1_der_decoding, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-der-decoding">asn1_der_decoding ()</a>
+</dt>
+<dt>asn1_der_decoding_element, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-der-decoding-element">asn1_der_decoding_element ()</a>
+</dt>
+<dt>asn1_der_decoding_startEnd, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-der-decoding-startEnd">asn1_der_decoding_startEnd ()</a>
+</dt>
+<dt>ASN1_DER_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS">ASN1_DER_ERROR</a>
+</dt>
+<dt>ASN1_DER_OVERFLOW, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS">ASN1_DER_OVERFLOW</a>
+</dt>
+<dt>ASN1_ELEMENT_NOT_EMPTY, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS">ASN1_ELEMENT_NOT_EMPTY</a>
+</dt>
+<dt>ASN1_ELEMENT_NOT_FOUND, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS">ASN1_ELEMENT_NOT_FOUND</a>
+</dt>
+<dt>ASN1_ERROR_TYPE_ANY, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS">ASN1_ERROR_TYPE_ANY</a>
+</dt>
+<dt>asn1_expand_any_defined_by, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-expand-any-defined-by">asn1_expand_any_defined_by ()</a>
+</dt>
+<dt>asn1_expand_octet_string, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-expand-octet-string">asn1_expand_octet_string ()</a>
+</dt>
+<dt>ASN1_FILE_NOT_FOUND, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS">ASN1_FILE_NOT_FOUND</a>
+</dt>
+<dt>asn1_find_node, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-find-node">asn1_find_node ()</a>
+</dt>
+<dt>asn1_find_structure_from_oid, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-find-structure-from-oid">asn1_find_structure_from_oid ()</a>
+</dt>
+<dt>ASN1_GENERIC_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS">ASN1_GENERIC_ERROR</a>
+</dt>
+<dt>asn1_get_bit_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-get-bit-der">asn1_get_bit_der ()</a>
+</dt>
+<dt>asn1_get_length_ber, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-get-length-ber">asn1_get_length_ber ()</a>
+</dt>
+<dt>asn1_get_length_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-get-length-der">asn1_get_length_der ()</a>
+</dt>
+<dt>asn1_get_octet_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-get-octet-der">asn1_get_octet_der ()</a>
+</dt>
+<dt>asn1_get_tag_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-get-tag-der">asn1_get_tag_der ()</a>
+</dt>
+<dt>ASN1_IDENTIFIER_NOT_FOUND, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS">ASN1_IDENTIFIER_NOT_FOUND</a>
+</dt>
+<dt>asn1_length_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-length-der">asn1_length_der ()</a>
+</dt>
+<dt>ASN1_MAX_ERROR_DESCRIPTION_SIZE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS">ASN1_MAX_ERROR_DESCRIPTION_SIZE</a>
+</dt>
+<dt>ASN1_MAX_NAME_SIZE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS">ASN1_MAX_NAME_SIZE</a>
+</dt>
+<dt>ASN1_MEM_ALLOC_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS">ASN1_MEM_ALLOC_ERROR</a>
+</dt>
+<dt>ASN1_MEM_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS">ASN1_MEM_ERROR</a>
+</dt>
+<dt>ASN1_NAME_TOO_LONG, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS">ASN1_NAME_TOO_LONG</a>
+</dt>
+<dt>asn1_number_of_elements, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-number-of-elements">asn1_number_of_elements ()</a>
+</dt>
+<dt>asn1_octet_der, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-octet-der">asn1_octet_der ()</a>
+</dt>
+<dt>asn1_parser2array, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-parser2array">asn1_parser2array ()</a>
+</dt>
+<dt>asn1_parser2tree, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-parser2tree">asn1_parser2tree ()</a>
+</dt>
+<dt>asn1_perror, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-perror">asn1_perror ()</a>
+</dt>
+<dt>ASN1_PRINT_ALL, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS">ASN1_PRINT_ALL</a>
+</dt>
+<dt>ASN1_PRINT_NAME, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS">ASN1_PRINT_NAME</a>
+</dt>
+<dt>ASN1_PRINT_NAME_TYPE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS">ASN1_PRINT_NAME_TYPE</a>
+</dt>
+<dt>ASN1_PRINT_NAME_TYPE_VALUE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS">ASN1_PRINT_NAME_TYPE_VALUE</a>
+</dt>
+<dt>asn1_print_structure, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-print-structure">asn1_print_structure ()</a>
+</dt>
+<dt>asn1_read_tag, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-read-tag">asn1_read_tag ()</a>
+</dt>
+<dt>asn1_read_value, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-read-value">asn1_read_value ()</a>
+</dt>
+<dt>asn1_retCode, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-retCode">asn1_retCode</a>
+</dt>
+<dt>asn1_strerror, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-strerror">asn1_strerror ()</a>
+</dt>
+<dt>ASN1_SUCCESS, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS">ASN1_SUCCESS</a>
+</dt>
+<dt>ASN1_SYNTAX_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS">ASN1_SYNTAX_ERROR</a>
+</dt>
+<dt>ASN1_TAG_BIT_STRING, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS">ASN1_TAG_BIT_STRING</a>
+</dt>
+<dt>ASN1_TAG_BOOLEAN, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS">ASN1_TAG_BOOLEAN</a>
+</dt>
+<dt>ASN1_TAG_ENUMERATED, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS">ASN1_TAG_ENUMERATED</a>
+</dt>
+<dt>ASN1_TAG_ERROR, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS">ASN1_TAG_ERROR</a>
+</dt>
+<dt>ASN1_TAG_GENERALIZEDTime, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime">ASN1_TAG_GENERALIZEDTime</a>
+</dt>
+<dt>ASN1_TAG_GENERALSTRING, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS">ASN1_TAG_GENERALSTRING</a>
+</dt>
+<dt>ASN1_TAG_IMPLICIT, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS">ASN1_TAG_IMPLICIT</a>
+</dt>
+<dt>ASN1_TAG_INTEGER, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS">ASN1_TAG_INTEGER</a>
+</dt>
+<dt>ASN1_TAG_NULL, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS">ASN1_TAG_NULL</a>
+</dt>
+<dt>ASN1_TAG_OBJECT_ID, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS">ASN1_TAG_OBJECT_ID</a>
+</dt>
+<dt>ASN1_TAG_OCTET_STRING, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS">ASN1_TAG_OCTET_STRING</a>
+</dt>
+<dt>ASN1_TAG_SEQUENCE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS">ASN1_TAG_SEQUENCE</a>
+</dt>
+<dt>ASN1_TAG_SET, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS">ASN1_TAG_SET</a>
+</dt>
+<dt>ASN1_TAG_UTCTime, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TAG-UTCTime">ASN1_TAG_UTCTime</a>
+</dt>
+<dt>ASN1_TYPE, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS">ASN1_TYPE</a>
+</dt>
+<dt>ASN1_TYPE_EMPTY, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS">ASN1_TYPE_EMPTY</a>
+</dt>
+<dt>ASN1_VALUE_NOT_FOUND, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS">ASN1_VALUE_NOT_FOUND</a>
+</dt>
+<dt>ASN1_VALUE_NOT_VALID, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS">ASN1_VALUE_NOT_VALID</a>
+</dt>
+<dt>ASN1_VERSION, <a class="indexterm" href="libtasn1-libtasn1.html#ASN1-VERSION:CAPS">ASN1_VERSION</a>
+</dt>
+<dt>asn1_write_value, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-write-value">asn1_write_value ()</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>L</h3>
+<dl>
+<dt>libtasn1_perror, <a class="indexterm" href="libtasn1-libtasn1.html#libtasn1-perror">libtasn1_perror ()</a>
+</dt>
+<dt>libtasn1_strerror, <a class="indexterm" href="libtasn1-libtasn1.html#libtasn1-strerror">libtasn1_strerror ()</a>
+</dt>
+<dt>LIBTASN1_VERSION, <a class="indexterm" href="libtasn1-libtasn1.html#LIBTASN1-VERSION:CAPS">LIBTASN1_VERSION</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>M</h3>
+<dl>
+<dt>MAX_ERROR_DESCRIPTION_SIZE, <a class="indexterm" href="libtasn1-libtasn1.html#MAX-ERROR-DESCRIPTION-SIZE:CAPS">MAX_ERROR_DESCRIPTION_SIZE</a>
+</dt>
+<dt>MAX_NAME_SIZE, <a class="indexterm" href="libtasn1-libtasn1.html#MAX-NAME-SIZE:CAPS">MAX_NAME_SIZE</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>N</h3>
+<dl><dt>node_asn, <a class="indexterm" href="libtasn1-libtasn1.html#node-asn">node_asn</a>
+</dt></dl>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.14</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 (file)
index 0000000..c580c47
--- /dev/null
@@ -0,0 +1,52 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<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="ix01.html" title="Index">
+<link rel="next" href="ix03.html" title="Index of new symbols in 1.6">
+<meta name="generator" content="GTK-Doc V1.14 (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="2"><tr valign="middle">
+<td><a accesskey="p" href="ix01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GNU Libtasn1 API Reference Manual</th>
+<td><a accesskey="n" href="ix03.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index" title="Index of deprecated symbols">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id3071799"></a>Index of deprecated symbols</h2></div></div></div>
+<div class="index">
+<div class="indexdiv">
+<h3>L</h3>
+<dl>
+<dt>libtasn1_perror, <a class="indexterm" href="libtasn1-libtasn1.html#libtasn1-perror">libtasn1_perror ()</a>
+</dt>
+<dt>libtasn1_strerror, <a class="indexterm" href="libtasn1-libtasn1.html#libtasn1-strerror">libtasn1_strerror ()</a>
+</dt>
+<dt>LIBTASN1_VERSION, <a class="indexterm" href="libtasn1-libtasn1.html#LIBTASN1-VERSION:CAPS">LIBTASN1_VERSION</a>
+</dt>
+</dl>
+</div>
+<div class="indexdiv">
+<h3>M</h3>
+<dl>
+<dt>MAX_ERROR_DESCRIPTION_SIZE, <a class="indexterm" href="libtasn1-libtasn1.html#MAX-ERROR-DESCRIPTION-SIZE:CAPS">MAX_ERROR_DESCRIPTION_SIZE</a>
+</dt>
+<dt>MAX_NAME_SIZE, <a class="indexterm" href="libtasn1-libtasn1.html#MAX-NAME-SIZE:CAPS">MAX_NAME_SIZE</a>
+</dt>
+</dl>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.14</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 (file)
index 0000000..030905f
--- /dev/null
@@ -0,0 +1,39 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<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.14 (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="2"><tr valign="middle">
+<td><a accesskey="p" href="ix02.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GNU Libtasn1 API Reference Manual</th>
+<td><a accesskey="n" href="ix04.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="index" title="Index of new symbols in 1.6">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id3071806"></a>Index of new symbols in 1.6</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>A</h3>
+<dl>
+<dt>asn1_perror, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-perror">asn1_perror ()</a>
+</dt>
+<dt>asn1_strerror, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-strerror">asn1_strerror ()</a>
+</dt>
+</dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.14</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 (file)
index 0000000..7b8f39b
--- /dev/null
@@ -0,0 +1,34 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<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.14 (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="2"><tr valign="middle">
+<td><a accesskey="p" href="ix03.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GNU Libtasn1 API Reference Manual</th>
+<td> </td>
+</tr></table>
+<div class="index" title="Index of new symbols in 2.0">
+<div class="titlepage"><div><div><h2 class="title">
+<a name="id3071814"></a>Index of new symbols in 2.0</h2></div></div></div>
+<div class="index"><div class="indexdiv">
+<h3>A</h3>
+<dl><dt>asn1_get_length_ber, <a class="indexterm" href="libtasn1-libtasn1.html#asn1-get-length-ber">asn1_get_length_ber ()</a>
+</dt></dl>
+</div></div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.14</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/reference/html/left.png b/doc/reference/html/left.png
new file mode 100644 (file)
index 0000000..2d05b3d
Binary files /dev/null and b/doc/reference/html/left.png differ
diff --git a/doc/reference/html/libtasn1-libtasn1.html b/doc/reference/html/libtasn1-libtasn1.html
new file mode 100644 (file)
index 0000000..de87b3b
--- /dev/null
@@ -0,0 +1,2163 @@
+<!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</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
+<link rel="home" href="index.html" title="GNU Libtasn1 API Reference Manual">
+<link rel="up" href="ch01.html" title="GNU Libtasn1 API Reference Manual">
+<link rel="prev" href="ch01.html" title="GNU Libtasn1 API Reference Manual">
+<link rel="next" href="ix01.html" title="Index">
+<meta name="generator" content="GTK-Doc V1.14 (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="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GNU Libtasn1 API Reference Manual</th>
+<td><a accesskey="n" href="ix01.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libtasn1-libtasn1.synopsis" class="shortcut">Top</a>
+                  Â | 
+                  <a href="#libtasn1-libtasn1.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry" title="libtasn1">
+<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 valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv" title="Synopsis">
+<a name="libtasn1-libtasn1.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-API:CAPS" title="ASN1_API">ASN1_API</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-VERSION:CAPS" title="ASN1_VERSION">ASN1_VERSION</a>
+typedef             <a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode">asn1_retCode</a>;
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS">ASN1_SUCCESS</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS" title="ASN1_FILE_NOT_FOUND">ASN1_FILE_NOT_FOUND</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND">ASN1_ELEMENT_NOT_FOUND</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS" title="ASN1_IDENTIFIER_NOT_FOUND">ASN1_IDENTIFIER_NOT_FOUND</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS" title="ASN1_DER_ERROR">ASN1_DER_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS" title="ASN1_VALUE_NOT_FOUND">ASN1_VALUE_NOT_FOUND</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS" title="ASN1_GENERIC_ERROR">ASN1_GENERIC_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS" title="ASN1_VALUE_NOT_VALID">ASN1_VALUE_NOT_VALID</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS" title="ASN1_TAG_ERROR">ASN1_TAG_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS" title="ASN1_TAG_IMPLICIT">ASN1_TAG_IMPLICIT</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS" title="ASN1_ERROR_TYPE_ANY">ASN1_ERROR_TYPE_ANY</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS" title="ASN1_SYNTAX_ERROR">ASN1_SYNTAX_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS" title="ASN1_MEM_ERROR">ASN1_MEM_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS" title="ASN1_MEM_ALLOC_ERROR">ASN1_MEM_ALLOC_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS" title="ASN1_DER_OVERFLOW">ASN1_DER_OVERFLOW</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS" title="ASN1_NAME_TOO_LONG">ASN1_NAME_TOO_LONG</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS" title="ASN1_ARRAY_ERROR">ASN1_ARRAY_ERROR</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS" title="ASN1_ELEMENT_NOT_EMPTY">ASN1_ELEMENT_NOT_EMPTY</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS" title="ASN1_PRINT_NAME">ASN1_PRINT_NAME</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS" title="ASN1_PRINT_NAME_TYPE">ASN1_PRINT_NAME_TYPE</a>
+#define             <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>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS" title="ASN1_PRINT_ALL">ASN1_PRINT_ALL</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS" title="ASN1_CLASS_UNIVERSAL">ASN1_CLASS_UNIVERSAL</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS" title="ASN1_CLASS_APPLICATION">ASN1_CLASS_APPLICATION</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS" title="ASN1_CLASS_CONTEXT_SPECIFIC">ASN1_CLASS_CONTEXT_SPECIFIC</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS" title="ASN1_CLASS_PRIVATE">ASN1_CLASS_PRIVATE</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS" title="ASN1_CLASS_STRUCTURED">ASN1_CLASS_STRUCTURED</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS" title="ASN1_TAG_BOOLEAN">ASN1_TAG_BOOLEAN</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS" title="ASN1_TAG_INTEGER">ASN1_TAG_INTEGER</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS" title="ASN1_TAG_SEQUENCE">ASN1_TAG_SEQUENCE</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS" title="ASN1_TAG_SET">ASN1_TAG_SET</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS" title="ASN1_TAG_OCTET_STRING">ASN1_TAG_OCTET_STRING</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS" title="ASN1_TAG_BIT_STRING">ASN1_TAG_BIT_STRING</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-UTCTime" title="ASN1_TAG_UTCTime">ASN1_TAG_UTCTime</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime" title="ASN1_TAG_GENERALIZEDTime">ASN1_TAG_GENERALIZEDTime</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS" title="ASN1_TAG_OBJECT_ID">ASN1_TAG_OBJECT_ID</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS" title="ASN1_TAG_ENUMERATED">ASN1_TAG_ENUMERATED</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS" title="ASN1_TAG_NULL">ASN1_TAG_NULL</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS" title="ASN1_TAG_GENERALSTRING">ASN1_TAG_GENERALSTRING</a>
+typedef             <a class="link" href="libtasn1-libtasn1.html#node-asn" title="node_asn">node_asn</a>;
+typedef             <a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE">ASN1_TYPE</a>;
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS" title="ASN1_TYPE_EMPTY">ASN1_TYPE_EMPTY</a>
+typedef             <a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS" title="ASN1_ARRAY_TYPE">ASN1_ARRAY_TYPE</a>;
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS" title="ASN1_MAX_NAME_SIZE">ASN1_MAX_NAME_SIZE</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS" title="ASN1_MAX_ERROR_DESCRIPTION_SIZE">ASN1_MAX_ERROR_DESCRIPTION_SIZE</a>
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-parser2tree" title="asn1_parser2tree ()">asn1_parser2tree</a>                    (<em class="parameter"><code>const <span class="type">char</span> *file_name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *definitions</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-parser2array" title="asn1_parser2array ()">asn1_parser2array</a>                   (<em class="parameter"><code>const <span class="type">char</span> *inputFileName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *outputFileName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *vectorName</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-array2tree" title="asn1_array2tree ()">asn1_array2tree</a>                     (<em class="parameter"><code>const <a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS" title="ASN1_ARRAY_TYPE"><span class="type">ASN1_ARRAY_TYPE</span></a> *array</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *definitions</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="libtasn1-libtasn1.html#asn1-print-structure" title="asn1_print_structure ()">asn1_print_structure</a>                (<em class="parameter"><code><span class="type">FILE</span> *out</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> structure</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> mode</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-create-element" title="asn1_create_element ()">asn1_create_element</a>                 (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *source_name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-delete-structure" title="asn1_delete_structure ()">asn1_delete_structure</a>               (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *structure</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-delete-element" title="asn1_delete_element ()">asn1_delete_element</a>                 (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> structure</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *element_name</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-write-value" title="asn1_write_value ()">asn1_write_value</a>                    (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> node_root</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ivalue</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-read-value" title="asn1_read_value ()">asn1_read_value</a>                     (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> root</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><span class="type">void</span> *ivalue</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-number-of-elements" title="asn1_number_of_elements ()">asn1_number_of_elements</a>             (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *num</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-der-coding" title="asn1_der_coding ()">asn1_der_coding</a>                     (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *ErrorDescription</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-der-decoding" title="asn1_der_decoding ()">asn1_der_decoding</a>                   (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-der-decoding-element" title="asn1_der_decoding_element ()">asn1_der_decoding_element</a>           (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *structure</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *elementName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-der-decoding-startEnd" title="asn1_der_decoding_startEnd ()">asn1_der_decoding_startEnd</a>          (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name_element</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *start</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *end</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-expand-any-defined-by" title="asn1_expand_any_defined_by ()">asn1_expand_any_defined_by</a>          (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-expand-octet-string" title="asn1_expand_octet_string ()">asn1_expand_octet_string</a>            (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *octetName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *objectName</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-read-tag" title="asn1_read_tag ()">asn1_read_tag</a>                       (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> root</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *tagValue</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *classValue</code></em>);
+const <span class="returnvalue">char</span> *        <a class="link" href="libtasn1-libtasn1.html#asn1-find-structure-from-oid" title="asn1_find_structure_from_oid ()">asn1_find_structure_from_oid</a>        (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *oidValue</code></em>);
+const <span class="returnvalue">char</span> *        <a class="link" href="libtasn1-libtasn1.html#asn1-check-version" title="asn1_check_version ()">asn1_check_version</a>                  (<em class="parameter"><code>const <span class="type">char</span> *req_version</code></em>);
+const <span class="returnvalue">char</span> *        <a class="link" href="libtasn1-libtasn1.html#asn1-strerror" title="asn1_strerror ()">asn1_strerror</a>                       (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="libtasn1-libtasn1.html#asn1-perror" title="asn1_perror ()">asn1_perror</a>                         (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);
+<a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="returnvalue">int</span></a>                 <a class="link" href="libtasn1-libtasn1.html#asn1-get-tag-der" title="asn1_get_tag_der ()">asn1_get_tag_der</a>                    (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *cls</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">long</span> *tag</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="libtasn1-libtasn1.html#asn1-octet-der" title="asn1_octet_der ()">asn1_octet_der</a>                      (<em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> str_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *der_len</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-get-octet-der" title="asn1_get_octet_der ()">asn1_get_octet_der</a>                  (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *ret_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> str_size</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *str_len</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="libtasn1-libtasn1.html#asn1-bit-der" title="asn1_bit_der ()">asn1_bit_der</a>                        (<em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> bit_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *der_len</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-get-bit-der" title="asn1_get_bit_der ()">asn1_get_bit_der</a>                    (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *ret_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> str_size</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *bit_len</code></em>);
+signed <span class="returnvalue">long</span>         <a class="link" href="libtasn1-libtasn1.html#asn1-get-length-der" title="asn1_get_length_der ()">asn1_get_length_der</a>                 (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>);
+signed <span class="returnvalue">long</span>         <a class="link" href="libtasn1-libtasn1.html#asn1-get-length-ber" title="asn1_get_length_ber ()">asn1_get_length_ber</a>                 (<em class="parameter"><code>unsigned <span class="type">char</span> *ber</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> ber_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="libtasn1-libtasn1.html#asn1-length-der" title="asn1_length_der ()">asn1_length_der</a>                     (<em class="parameter"><code>unsigned long <a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *ans</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *ans_len</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="returnvalue">ASN1_TYPE</span></a>           <a class="link" href="libtasn1-libtasn1.html#asn1-find-node" title="asn1_find_node ()">asn1_find_node</a>                      (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> pointer</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);
+<a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        <a class="link" href="libtasn1-libtasn1.html#asn1-copy-node" title="asn1_copy_node ()">asn1_copy_node</a>                      (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> dst</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *dst_name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> src</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *src_name</code></em>);
+#define             <a class="link" href="libtasn1-libtasn1.html#LIBTASN1-VERSION:CAPS" title="LIBTASN1_VERSION">LIBTASN1_VERSION</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#MAX-NAME-SIZE:CAPS" title="MAX_NAME_SIZE">MAX_NAME_SIZE</a>
+#define             <a class="link" href="libtasn1-libtasn1.html#MAX-ERROR-DESCRIPTION-SIZE:CAPS" title="MAX_ERROR_DESCRIPTION_SIZE">MAX_ERROR_DESCRIPTION_SIZE</a>
+const <span class="returnvalue">char</span> *        <a class="link" href="libtasn1-libtasn1.html#libtasn1-strerror" title="libtasn1_strerror ()">libtasn1_strerror</a>                   (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);
+<span class="returnvalue">void</span>                <a class="link" href="libtasn1-libtasn1.html#libtasn1-perror" title="libtasn1_perror ()">libtasn1_perror</a>                     (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);
+</pre>
+</div>
+<div class="refsect1" title="Description">
+<a name="libtasn1-libtasn1.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1" title="Details">
+<a name="libtasn1-libtasn1.details"></a><h2>Details</h2>
+<div class="refsect2" title="ASN1_API">
+<a name="ASN1-API:CAPS"></a><h3>ASN1_API</h3>
+<pre class="programlisting">#define             ASN1_API</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_VERSION">
+<a name="ASN1-VERSION:CAPS"></a><h3>ASN1_VERSION</h3>
+<pre class="programlisting">#define ASN1_VERSION "2.7"
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="asn1_retCode">
+<a name="asn1-retCode"></a><h3>asn1_retCode</h3>
+<pre class="programlisting">  typedef int asn1_retCode; /* type returned by libtasn1 functions */
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_SUCCESS">
+<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" title="ASN1_FILE_NOT_FOUND">
+<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" title="ASN1_ELEMENT_NOT_FOUND">
+<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" title="ASN1_IDENTIFIER_NOT_FOUND">
+<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" title="ASN1_DER_ERROR">
+<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" title="ASN1_VALUE_NOT_FOUND">
+<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" title="ASN1_GENERIC_ERROR">
+<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" title="ASN1_VALUE_NOT_VALID">
+<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" title="ASN1_TAG_ERROR">
+<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" title="ASN1_TAG_IMPLICIT">
+<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" title="ASN1_ERROR_TYPE_ANY">
+<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" title="ASN1_SYNTAX_ERROR">
+<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" title="ASN1_MEM_ERROR">
+<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" title="ASN1_MEM_ALLOC_ERROR">
+<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" title="ASN1_DER_OVERFLOW">
+<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" title="ASN1_NAME_TOO_LONG">
+<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" title="ASN1_ARRAY_ERROR">
+<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" title="ASN1_ELEMENT_NOT_EMPTY">
+<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" title="ASN1_PRINT_NAME">
+<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" title="ASN1_PRINT_NAME_TYPE">
+<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" title="ASN1_PRINT_NAME_TYPE_VALUE">
+<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" title="ASN1_PRINT_ALL">
+<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" title="ASN1_CLASS_UNIVERSAL">
+<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" title="ASN1_CLASS_APPLICATION">
+<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" title="ASN1_CLASS_CONTEXT_SPECIFIC">
+<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" title="ASN1_CLASS_PRIVATE">
+<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" title="ASN1_CLASS_STRUCTURED">
+<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" title="ASN1_TAG_BOOLEAN">
+<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" title="ASN1_TAG_INTEGER">
+<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" title="ASN1_TAG_SEQUENCE">
+<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" title="ASN1_TAG_SET">
+<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" title="ASN1_TAG_OCTET_STRING">
+<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" title="ASN1_TAG_BIT_STRING">
+<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" title="ASN1_TAG_UTCTime">
+<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" title="ASN1_TAG_GENERALIZEDTime">
+<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" title="ASN1_TAG_OBJECT_ID">
+<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" title="ASN1_TAG_ENUMERATED">
+<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" title="ASN1_TAG_NULL">
+<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" title="ASN1_TAG_GENERALSTRING">
+<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" title="node_asn">
+<a name="node-asn"></a><h3>node_asn</h3>
+<pre class="programlisting">  typedef struct node_asn_struct node_asn;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_TYPE">
+<a name="ASN1-TYPE:CAPS"></a><h3>ASN1_TYPE</h3>
+<pre class="programlisting">  typedef node_asn *ASN1_TYPE;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_TYPE_EMPTY">
+<a name="ASN1-TYPE-EMPTY:CAPS"></a><h3>ASN1_TYPE_EMPTY</h3>
+<pre class="programlisting">#define ASN1_TYPE_EMPTY  NULL
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_ARRAY_TYPE">
+<a name="ASN1-ARRAY-TYPE:CAPS"></a><h3>ASN1_ARRAY_TYPE</h3>
+<pre class="programlisting">  typedef struct static_struct_asn ASN1_ARRAY_TYPE;
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_MAX_NAME_SIZE">
+<a name="ASN1-MAX-NAME-SIZE:CAPS"></a><h3>ASN1_MAX_NAME_SIZE</h3>
+<pre class="programlisting">#define ASN1_MAX_NAME_SIZE 128
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="ASN1_MAX_ERROR_DESCRIPTION_SIZE">
+<a name="ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS"></a><h3>ASN1_MAX_ERROR_DESCRIPTION_SIZE</h3>
+<pre class="programlisting">#define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128
+</pre>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="asn1_parser2tree ()">
+<a name="asn1-parser2tree"></a><h3>asn1_parser2tree ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_parser2tree                    (<em class="parameter"><code>const <span class="type">char</span> *file_name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *definitions</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);</pre>
+<p>
+Function used to start the parse algorithm.  Creates the structures
+needed to manage the definitions included in <em class="parameter"><code>file_name</code></em> file.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>file_name</code></em> :</span></p></td>
+<td>specify the path and the name of file that contains
+  ASN.1 declarations.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>definitions</code></em> :</span></p></td>
+<td>return the pointer to the structure created from
+  "file_name" ASN.1 declarations.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>errorDescription</code></em> :</span></p></td>
+<td>return the error description or an empty
+string if success.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: The file has a correct syntax and every identifier
+is known.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS" title="ASN1_ELEMENT_NOT_EMPTY"><code class="literal">ASN1_ELEMENT_NOT_EMPTY</code></a>: <em class="parameter"><code>definitions</code></em> not <a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS" title="ASN1_TYPE_EMPTY"><code class="literal">ASN1_TYPE_EMPTY</code></a>.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS" title="ASN1_FILE_NOT_FOUND"><code class="literal">ASN1_FILE_NOT_FOUND</code></a>: An error occured while opening <em class="parameter"><code>file_name</code></em>.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS" title="ASN1_SYNTAX_ERROR"><code class="literal">ASN1_SYNTAX_ERROR</code></a>: The syntax is not correct.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS" title="ASN1_IDENTIFIER_NOT_FOUND"><code class="literal">ASN1_IDENTIFIER_NOT_FOUND</code></a>: In the file there is an identifier that
+is not defined.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS" title="ASN1_NAME_TOO_LONG"><code class="literal">ASN1_NAME_TOO_LONG</code></a>: In the file there is an identifier whith more
+than <a class="link" href="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS" title="ASN1_MAX_NAME_SIZE"><code class="literal">ASN1_MAX_NAME_SIZE</code></a> characters.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_parser2array ()">
+<a name="asn1-parser2array"></a><h3>asn1_parser2array ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_parser2array                   (<em class="parameter"><code>const <span class="type">char</span> *inputFileName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *outputFileName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *vectorName</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);</pre>
+<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 <em class="parameter"><code>inputFileName</code></em> file. If <em class="parameter"><code>inputFileName</code></em> is
+"/aa/bb/xx.yy" and <em class="parameter"><code>outputFileName</code></em> is <code class="literal">NULL</code>, the file created is
+"/aa/bb/xx_asn1_tab.c".  If <em class="parameter"><code>vectorName</code></em> is <code class="literal">NULL</code> the vector name
+will be "xx_asn1_tab".</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>inputFileName</code></em> :</span></p></td>
+<td>specify the path and the name of file that
+  contains ASN.1 declarations.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>outputFileName</code></em> :</span></p></td>
+<td>specify the path and the name of file that will
+  contain the C vector definition.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>vectorName</code></em> :</span></p></td>
+<td>specify the name of the C vector.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>errorDescription</code></em> :</span></p></td>
+<td>return the error description or an empty
+  string if success.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: The file has a correct syntax and every identifier
+  is known.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS" title="ASN1_FILE_NOT_FOUND"><code class="literal">ASN1_FILE_NOT_FOUND</code></a>: An error occured while opening <em class="parameter"><code>inputFileName</code></em>.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS" title="ASN1_SYNTAX_ERROR"><code class="literal">ASN1_SYNTAX_ERROR</code></a>: The syntax is not correct.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS" title="ASN1_IDENTIFIER_NOT_FOUND"><code class="literal">ASN1_IDENTIFIER_NOT_FOUND</code></a>: In the file there is an identifier that
+  is not defined.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS" title="ASN1_NAME_TOO_LONG"><code class="literal">ASN1_NAME_TOO_LONG</code></a>: In the file there is an identifier whith more
+  than <a class="link" href="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS" title="ASN1_MAX_NAME_SIZE"><code class="literal">ASN1_MAX_NAME_SIZE</code></a> characters.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_array2tree ()">
+<a name="asn1-array2tree"></a><h3>asn1_array2tree ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_array2tree                     (<em class="parameter"><code>const <a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS" title="ASN1_ARRAY_TYPE"><span class="type">ASN1_ARRAY_TYPE</span></a> *array</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *definitions</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);</pre>
+<p>
+Creates the structures needed to manage the ASN.1 definitions.
+<em class="parameter"><code>array</code></em> is a vector created by <a class="link" href="libtasn1-libtasn1.html#asn1-parser2array" title="asn1_parser2array ()"><code class="function">asn1_parser2array()</code></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>array</code></em> :</span></p></td>
+<td>specify the array that contains ASN.1 declarations
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>definitions</code></em> :</span></p></td>
+<td>return the pointer to the structure created by
+  *ARRAY ASN.1 declarations
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>errorDescription</code></em> :</span></p></td>
+<td>return the error description.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Structure created correctly.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS" title="ASN1_ELEMENT_NOT_EMPTY"><code class="literal">ASN1_ELEMENT_NOT_EMPTY</code></a>: *<em class="parameter"><code>definitions</code></em> not ASN1_TYPE_EMPTY.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS" title="ASN1_IDENTIFIER_NOT_FOUND"><code class="literal">ASN1_IDENTIFIER_NOT_FOUND</code></a>: In the file there is an identifier that
+  is not defined (see <em class="parameter"><code>errorDescription</code></em> for more information).
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS" title="ASN1_ARRAY_ERROR"><code class="literal">ASN1_ARRAY_ERROR</code></a>: The array pointed by <em class="parameter"><code>array</code></em> is wrong.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_print_structure ()">
+<a name="asn1-print-structure"></a><h3>asn1_print_structure ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                asn1_print_structure                (<em class="parameter"><code><span class="type">FILE</span> *out</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> structure</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> mode</code></em>);</pre>
+<p>
+Prints on the <em class="parameter"><code>out</code></em> file descriptor the structure's tree starting
+from the <em class="parameter"><code>name</code></em> element inside the structure <em class="parameter"><code>structure</code></em>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>out</code></em> :</span></p></td>
+<td>pointer to the output file (e.g. stdout).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>structure</code></em> :</span></p></td>
+<td>pointer to the structure that you want to visit.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>an element of the structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mode</code></em> :</span></p></td>
+<td>specify how much of the structure to print, can be
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS" title="ASN1_PRINT_NAME"><code class="literal">ASN1_PRINT_NAME</code></a>, <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS" title="ASN1_PRINT_NAME_TYPE"><code class="literal">ASN1_PRINT_NAME_TYPE</code></a>,
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS" title="ASN1_PRINT_NAME_TYPE_VALUE"><code class="literal">ASN1_PRINT_NAME_TYPE_VALUE</code></a>, or <a class="link" href="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS" title="ASN1_PRINT_ALL"><code class="literal">ASN1_PRINT_ALL</code></a>.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_create_element ()">
+<a name="asn1-create-element"></a><h3>asn1_create_element ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_create_element                 (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *source_name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>);</pre>
+<p>
+Creates a structure of type <em class="parameter"><code>source_name</code></em>.  Example using
+ "pkix.asn":
+</p>
+<p>
+rc = asn1_create_element(cert_def, "PKIX1.Certificate", certptr);</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>definitions</code></em> :</span></p></td>
+<td>pointer to the structure returned by "parser_asn1" function
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>source_name</code></em> :</span></p></td>
+<td>the name of the type of the new structure (must be
+  inside p_structure).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to the structure created.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Creation OK.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: SOURCE_NAME isn't known
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_delete_structure ()">
+<a name="asn1-delete-structure"></a><h3>asn1_delete_structure ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_delete_structure               (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *structure</code></em>);</pre>
+<p>
+Deletes the structure *<em class="parameter"><code>structure</code></em>.  At the end, *<em class="parameter"><code>structure</code></em> is set
+to ASN1_TYPE_EMPTY.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>structure</code></em> :</span></p></td>
+<td>pointer to the structure that you want to delete.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Everything OK.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: *<em class="parameter"><code>structure</code></em> was ASN1_TYPE_EMPTY.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_delete_element ()">
+<a name="asn1-delete-element"></a><h3>asn1_delete_element ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_delete_element                 (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> structure</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *element_name</code></em>);</pre>
+<p>
+Deletes the element named *<em class="parameter"><code>element_name</code></em> inside *<em class="parameter"><code>structure</code></em>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>structure</code></em> :</span></p></td>
+<td>pointer to the structure that contains the element you
+  want to delete.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element_name</code></em> :</span></p></td>
+<td>element's name you want to delete.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Everything OK.
+
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: The name element was not found.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_write_value ()">
+<a name="asn1-write-value"></a><h3>asn1_write_value ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_write_value                    (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> node_root</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ivalue</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>);</pre>
+<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>
+INTEGER: VALUE must contain a two's complement form integer.
+</p>
+<p>
+           value[0]=0xFF ,               len=1 -&gt; integer=-1.
+           value[0]=0xFF value[1]=0xFF , len=2 -&gt; integer=-1.
+           value[0]=0x01 ,               len=1 -&gt; integer= 1.
+           value[0]=0x00 value[1]=0x01 , len=2 -&gt; integer= 1.
+           value="123"                 , len=0 -&gt; integer= 123.
+</p>
+<p>
+ENUMERATED: As INTEGER (but only with not negative numbers).
+</p>
+<p>
+BOOLEAN: VALUE must be the null terminated string "TRUE" or
+  "FALSE" and LEN != 0.
+</p>
+<p>
+           value="TRUE" , len=1 -&gt; boolean=TRUE.
+           value="FALSE" , len=1 -&gt; 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 -&gt; OID=dsa-with-sha.
+</p>
+<p>
+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.
+</p>
+<p>
+           value="9801011200Z" , len=1 -&gt; time=Jannuary 1st, 1998
+           at 12h 00m Greenwich Mean Time
+</p>
+<p>
+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
+</p>
+<p>
+           value="2001010112001.12-0700" , len=1 -&gt; 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 -&gt; three bytes octet string
+</p>
+<p>
+GeneralString: VALUE contains the generalstring and LEN is the
+  number of octets.
+</p>
+<p>
+           value="$\backslash$x01$\backslash$x02$\backslash$x03" ,
+           len=3 -&gt; 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 -&gt; bit string="110011" (six
+  bits)
+</p>
+<p>
+CHOICE: 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>
+ANY: 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>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>node_root</code></em> :</span></p></td>
+<td>pointer to a structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the element inside the structure that you want to set.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ivalue</code></em> :</span></p></td>
+<td>vector used to specify the value to set. If len is &gt;0,
+  VALUE must be a two's complement form integer.  if len=0 *VALUE
+  must be a null terminated string with an integer value.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>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
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Set value OK.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: NAME is not a valid element.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS" title="ASN1_VALUE_NOT_VALID"><code class="literal">ASN1_VALUE_NOT_VALID</code></a>: VALUE has a wrong format.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_read_value ()">
+<a name="asn1-read-value"></a><h3>asn1_read_value ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_read_value                     (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> root</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><span class="type">void</span> *ivalue</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>);</pre>
+<p>
+Returns the value of one element inside a structure.
+</p>
+<p>
+If an element is OPTIONAL and the function "read_value" returns
+<a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>, 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.
+</p>
+<p>
+INTEGER: VALUE will contain a two's complement form integer.
+</p>
+<p>
+           integer=-1  -&gt; value[0]=0xFF , len=1.
+           integer=1   -&gt; value[0]=0x01 , len=1.
+</p>
+<p>
+ENUMERATED: As INTEGER (but only with not negative numbers).
+</p>
+<p>
+BOOLEAN: 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>
+UTCTime: 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>
+GeneralizedTime: 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>
+GeneralString: 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>
+CHOICE: If NAME indicates a choice type, VALUE will specify the
+  alternative selected.
+</p>
+<p>
+ANY: If NAME indicates an any type, VALUE will indicate the DER
+  encoding of the structure actually used.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>root</code></em> :</span></p></td>
+<td>pointer to a structure.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the element inside a structure that you want to read.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ivalue</code></em> :</span></p></td>
+<td>vector that will contain the element's content, must be a
+  pointer to memory cells already allocated.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>number of bytes of *value: value[0]..value[len-1]. Initialy
+  holds the sizeof value.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Set value OK.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: NAME is not a valid element.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS" title="ASN1_VALUE_NOT_FOUND"><code class="literal">ASN1_VALUE_NOT_FOUND</code></a>: There isn't any value for the element selected.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS" title="ASN1_MEM_ERROR"><code class="literal">ASN1_MEM_ERROR</code></a>: The value vector isn't big enough to store the result.
+  In this case LEN will contain the number of bytes needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_number_of_elements ()">
+<a name="asn1-number-of-elements"></a><h3>asn1_number_of_elements ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_number_of_elements             (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *num</code></em>);</pre>
+<p>
+Counts the number of elements of a sub-structure called NAME with
+names equal to "?1","?2", ...</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to the root of an ASN1 structure.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of a sub-structure of ROOT.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>num</code></em> :</span></p></td>
+<td>pointer to an integer where the result will be stored
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+ <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Creation OK.
+
+ <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: NAME isn't known.
+
+ <a class="link" href="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS" title="ASN1_GENERIC_ERROR"><code class="literal">ASN1_GENERIC_ERROR</code></a>: Pointer num equal to NULL.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_der_coding ()">
+<a name="asn1-der-coding"></a><h3>asn1_der_coding ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_der_coding                     (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *ErrorDescription</code></em>);</pre>
+<p>
+Creates the DER encoding for the NAME structure (inside *POINTER
+structure).</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to an ASN1 element
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the structure you want to encode (it must be
+  inside *POINTER).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ider</code></em> :</span></p></td>
+<td>vector that will contain the DER encoding. DER must be a
+  pointer to memory cells already allocated.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>number of bytes of *<em class="parameter"><code>ider</code></em>: <em class="parameter"><code>ider</code></em>[0]..<em class="parameter"><code>ider</code></em>[len-1], Initialy
+  holds the sizeof of der vector.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ErrorDescription</code></em> :</span></p></td>
+<td>return the error description or an empty
+  string if success.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: DER encoding OK.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: NAME is not a valid element.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS" title="ASN1_VALUE_NOT_FOUND"><code class="literal">ASN1_VALUE_NOT_FOUND</code></a>: There is an element without a value.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS" title="ASN1_MEM_ERROR"><code class="literal">ASN1_MEM_ERROR</code></a>: <em class="parameter"><code>ider</code></em> vector isn't big enough. Also in this case
+    LEN will contain the length needed.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_der_decoding ()">
+<a name="asn1-der-decoding"></a><h3>asn1_der_decoding ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_der_decoding                   (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);</pre>
+<p>
+Fill the structure *<em class="parameter"><code>ELEMENT</code></em> with values of a DER encoding
+string. The structure must just be created with function
+<a class="link" href="libtasn1-libtasn1.html#asn1-create-element" title="asn1_create_element ()"><code class="function">asn1_create_element()</code></a>.  If an error occurs during the decoding
+procedure, the *<em class="parameter"><code>ELEMENT</code></em> is deleted and set equal to
+<a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS" title="ASN1_TYPE_EMPTY"><code class="literal">ASN1_TYPE_EMPTY</code></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to an ASN1 structure.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ider</code></em> :</span></p></td>
+<td>vector that contains the DER encoding.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>number of bytes of *<em class="parameter"><code>ider</code></em>: <em class="parameter"><code>ider</code></em>[0]..<em class="parameter"><code>ider</code></em>[len-1].
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>errorDescription</code></em> :</span></p></td>
+<td>null-terminated string contains details when an
+  error occurred.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> if DER encoding OK, <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>
+  if <em class="parameter"><code>ELEMENT</code></em> is <a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS" title="ASN1_TYPE_EMPTY"><code class="literal">ASN1_TYPE_EMPTY</code></a>, and <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS" title="ASN1_TAG_ERROR"><code class="literal">ASN1_TAG_ERROR</code></a> or
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS" title="ASN1_DER_ERROR"><code class="literal">ASN1_DER_ERROR</code></a> if the der encoding doesn't match the structure
+  name (*<em class="parameter"><code>ELEMENT</code></em> deleted).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_der_decoding_element ()">
+<a name="asn1-der-decoding-element"></a><h3>asn1_der_decoding_element ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_der_decoding_element           (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *structure</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *elementName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code><span class="type">char</span> *errorDescription</code></em>);</pre>
+<p>
+Fill the element named <em class="parameter"><code>ELEMENTNAME</code></em> with values of a DER encoding
+string.  The structure must just be created with function
+<a class="link" href="libtasn1-libtasn1.html#asn1-create-element" title="asn1_create_element ()"><code class="function">asn1_create_element()</code></a>.  The DER vector must contain the encoding
+string of the whole <em class="parameter"><code>STRUCTURE</code></em>.  If an error occurs during the
+decoding procedure, the *<em class="parameter"><code>STRUCTURE</code></em> is deleted and set equal to
+<a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS" title="ASN1_TYPE_EMPTY"><code class="literal">ASN1_TYPE_EMPTY</code></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>structure</code></em> :</span></p></td>
+<td>pointer to an ASN1 structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>elementName</code></em> :</span></p></td>
+<td>name of the element to fill
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ider</code></em> :</span></p></td>
+<td>vector that contains the DER encoding of the whole structure.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>number of bytes of *der: der[0]..der[len-1]
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>errorDescription</code></em> :</span></p></td>
+<td>null-terminated string contains details when an
+  error occurred.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> if DER encoding OK, <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>
+  if ELEMENT is <a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS" title="ASN1_TYPE_EMPTY"><code class="literal">ASN1_TYPE_EMPTY</code></a> or <em class="parameter"><code>elementName</code></em> == NULL, and
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS" title="ASN1_TAG_ERROR"><code class="literal">ASN1_TAG_ERROR</code></a> or <a class="link" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS" title="ASN1_DER_ERROR"><code class="literal">ASN1_DER_ERROR</code></a> if the der encoding doesn't
+  match the structure <em class="parameter"><code>structure</code></em> (*ELEMENT deleted).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_der_decoding_startEnd ()">
+<a name="asn1-der-decoding-startEnd"></a><h3>asn1_der_decoding_startEnd ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_der_decoding_startEnd          (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">void</span> *ider</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name_element</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *start</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *end</code></em>);</pre>
+<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 <a class="link" href="libtasn1-libtasn1.html#asn1-der-decoding" title="asn1_der_decoding ()"><code class="function">asn1_der_decoding()</code></a> 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>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to an ASN1 element
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ider</code></em> :</span></p></td>
+<td>vector that contains the DER encoding.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>number of bytes of *<em class="parameter"><code>ider</code></em>: <em class="parameter"><code>ider</code></em>[0]..<em class="parameter"><code>ider</code></em>[len-1]
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name_element</code></em> :</span></p></td>
+<td>an element of NAME structure.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>start</code></em> :</span></p></td>
+<td>the position of the first byte of NAME_ELEMENT decoding
+  (<em class="parameter"><code>ider</code></em>[*start])
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>end</code></em> :</span></p></td>
+<td>the position of the last byte of NAME_ELEMENT decoding
+ (<em class="parameter"><code>ider</code></em>[*end])
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> if DER encoding OK, <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>
+  if ELEMENT is <a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><code class="literal">ASN1_TYPE</code></a> EMPTY or <em class="parameter"><code>name_element</code></em> is not a valid
+  element, <a class="link" href="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS" title="ASN1_TAG_ERROR"><code class="literal">ASN1_TAG_ERROR</code></a> or <a class="link" href="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS" title="ASN1_DER_ERROR"><code class="literal">ASN1_DER_ERROR</code></a> if the der encoding
+  doesn't match the structure ELEMENT.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_expand_any_defined_by ()">
+<a name="asn1-expand-any-defined-by"></a><h3>asn1_expand_any_defined_by ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_expand_any_defined_by          (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>);</pre>
+<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>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>definitions</code></em> :</span></p></td>
+<td>ASN1 definitions
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to an ASN1 structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> if Substitution OK, <a class="link" href="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS" title="ASN1_ERROR_TYPE_ANY"><code class="literal">ASN1_ERROR_TYPE_ANY</code></a> if
+  some "ANY DEFINED BY" element couldn't be expanded due to a
+  problem in OBJECT_ID -&gt; TYPE association, or other error codes
+  depending on DER decoding.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_expand_octet_string ()">
+<a name="asn1-expand-octet-string"></a><h3>asn1_expand_octet_string ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_expand_octet_string            (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> *element</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *octetName</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *objectName</code></em>);</pre>
+<p>
+Expands an "OCTET STRING" element of a structure created from a DER
+decoding process (the <a class="link" href="libtasn1-libtasn1.html#asn1-der-decoding" title="asn1_der_decoding ()"><code class="function">asn1_der_decoding()</code></a> 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>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>definitions</code></em> :</span></p></td>
+<td>ASN1 definitions
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>element</code></em> :</span></p></td>
+<td>pointer to an ASN1 structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>octetName</code></em> :</span></p></td>
+<td>name of the OCTECT STRING field to expand.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>objectName</code></em> :</span></p></td>
+<td>name of the OBJECT IDENTIFIER field to use to define
+   the type for expansion.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> if substitution OK, <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>
+  if <em class="parameter"><code>objectName</code></em> or <em class="parameter"><code>octetName</code></em> are not correct,
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS" title="ASN1_VALUE_NOT_VALID"><code class="literal">ASN1_VALUE_NOT_VALID</code></a> if it wasn't possible to find the type to
+  use for expansion, or other errors depending on DER decoding.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_read_tag ()">
+<a name="asn1-read-tag"></a><h3>asn1_read_tag ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_read_tag                       (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> root</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *tagValue</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *classValue</code></em>);</pre>
+<p>
+Returns the TAG and the CLASS of one element inside a structure.
+CLASS can have one of these constants: <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS" title="ASN1_CLASS_APPLICATION"><code class="literal">ASN1_CLASS_APPLICATION</code></a>,
+<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS" title="ASN1_CLASS_UNIVERSAL"><code class="literal">ASN1_CLASS_UNIVERSAL</code></a>, <a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS" title="ASN1_CLASS_PRIVATE"><code class="literal">ASN1_CLASS_PRIVATE</code></a> or
+<a class="link" href="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS" title="ASN1_CLASS_CONTEXT_SPECIFIC"><code class="literal">ASN1_CLASS_CONTEXT_SPECIFIC</code></a>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>root</code></em> :</span></p></td>
+<td>pointer to a structure
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>the name of the element inside a structure.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tagValue</code></em> :</span></p></td>
+<td>variable that will contain the TAG value.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>classValue</code></em> :</span></p></td>
+<td>variable that will specify the TAG type.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a>: Set value OK.
+
+  <a class="link" href="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS" title="ASN1_ELEMENT_NOT_FOUND"><code class="literal">ASN1_ELEMENT_NOT_FOUND</code></a>: NAME is not a valid element.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_find_structure_from_oid ()">
+<a name="asn1-find-structure-from-oid"></a><h3>asn1_find_structure_from_oid ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *        asn1_find_structure_from_oid        (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> definitions</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *oidValue</code></em>);</pre>
+<p>
+Search the structure that is defined just after an OID definition.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>definitions</code></em> :</span></p></td>
+<td>ASN1 definitions
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>oidValue</code></em> :</span></p></td>
+<td>value of the OID to search (e.g. "1.2.3.4").
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> <code class="literal">NULL</code> when <em class="parameter"><code>oidValue</code></em> not found, otherwise the pointer to a
+  constant string that contains the element name defined just after
+  the OID.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_check_version ()">
+<a name="asn1-check-version"></a><h3>asn1_check_version ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *        asn1_check_version                  (<em class="parameter"><code>const <span class="type">char</span> *req_version</code></em>);</pre>
+<p>
+Check that the version of the library is at minimum the
+requested one and return the version string; return <code class="literal">NULL</code> if the
+condition is not satisfied.  If a <code class="literal">NULL</code> is passed to this function,
+no check is done, but the version string is simply returned.
+</p>
+<p>
+See <a class="link" href="libtasn1-libtasn1.html#ASN1-VERSION:CAPS" title="ASN1_VERSION"><code class="literal">ASN1_VERSION</code></a> for a suitable <em class="parameter"><code>req_version</code></em> string.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>req_version</code></em> :</span></p></td>
+<td>Required version number, or <code class="literal">NULL</code>.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Version string of run-time library, or <code class="literal">NULL</code> if the
+  run-time library does not meet the required version number.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_strerror ()">
+<a name="asn1-strerror"></a><h3>asn1_strerror ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *        asn1_strerror                       (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);</pre>
+<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>
+This function replaces <a class="link" href="libtasn1-libtasn1.html#libtasn1-strerror" title="libtasn1_strerror ()"><code class="function">libtasn1_strerror()</code></a> in older libtasn1.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>is an error returned by a libtasn1 function.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Pointer to static zero-terminated string describing error
+  code.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" title="asn1_perror ()">
+<a name="asn1-perror"></a><h3>asn1_perror ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                asn1_perror                         (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);</pre>
+<p>
+Prints a string to stderr with a description of an error.  This
+function is like <code class="function">perror()</code>.  The only difference is that it accepts
+an error returned by a libtasn1 function.
+</p>
+<p>
+This function replaces <a class="link" href="libtasn1-libtasn1.html#libtasn1-perror" title="libtasn1_perror ()"><code class="function">libtasn1_perror()</code></a> in older libtasn1.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>is an error returned by a libtasn1 function.
+</td>
+</tr></tbody>
+</table></div>
+<p class="since">Since 1.6</p>
+</div>
+<hr>
+<div class="refsect2" title="asn1_get_tag_der ()">
+<a name="asn1-get-tag-der"></a><h3>asn1_get_tag_der ()</h3>
+<pre class="programlisting"><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="returnvalue">int</span></a>                 asn1_get_tag_der                    (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *cls</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">long</span> *tag</code></em>);</pre>
+<p>
+Decode the class and TAG from DER code.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der</code></em> :</span></p></td>
+<td>DER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der_len</code></em> :</span></p></td>
+<td>Length of DER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>cls</code></em> :</span></p></td>
+<td>Output variable containing decoded class.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Output variable containing the length of the DER TAG data.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>tag</code></em> :</span></p></td>
+<td>Output variable containing the decoded tag.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Returns <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> on success, or an error.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_octet_der ()">
+<a name="asn1-octet-der"></a><h3>asn1_octet_der ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                asn1_octet_der                      (<em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> str_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *der_len</code></em>);</pre>
+<p>
+Creates the DER coding for an OCTET type (length included).</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>OCTET string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str_len</code></em> :</span></p></td>
+<td>STR length (str[0]..str[str_len-1]).
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der</code></em> :</span></p></td>
+<td>string returned.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der_len</code></em> :</span></p></td>
+<td>number of meaningful bytes of DER (der[0]..der[ans_len-1]).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_get_octet_der ()">
+<a name="asn1-get-octet-der"></a><h3>asn1_get_octet_der ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_get_octet_der                  (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *ret_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> str_size</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *str_len</code></em>);</pre>
+<p>
+Extract an OCTET SEQUENCE from DER data.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der</code></em> :</span></p></td>
+<td>DER data to decode containing the OCTET SEQUENCE.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der_len</code></em> :</span></p></td>
+<td>Length of DER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ret_len</code></em> :</span></p></td>
+<td>Output variable containing the length of the DER data.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>Pre-allocated output buffer to put decoded OCTET SEQUENCE in.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str_size</code></em> :</span></p></td>
+<td>Length of pre-allocated output buffer.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str_len</code></em> :</span></p></td>
+<td>Output variable containing the length of the OCTET SEQUENCE.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Returns <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> on success, or an error.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_bit_der ()">
+<a name="asn1-bit-der"></a><h3>asn1_bit_der ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                asn1_bit_der                        (<em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> bit_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *der_len</code></em>);</pre>
+<p>
+Creates the DER coding for a BIT STRING type (length and pad
+included).</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>BIT string.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bit_len</code></em> :</span></p></td>
+<td>number of meaningful bits in STR.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der</code></em> :</span></p></td>
+<td>string returned.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der_len</code></em> :</span></p></td>
+<td>number of meaningful bytes of DER
+  (der[0]..der[ans_len-1]).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_get_bit_der ()">
+<a name="asn1-get-bit-der"></a><h3>asn1_get_bit_der ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_get_bit_der                    (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *ret_len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *str</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> str_size</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *bit_len</code></em>);</pre>
+<p>
+Extract a BIT SEQUENCE from DER data.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der</code></em> :</span></p></td>
+<td>DER data to decode containing the BIT SEQUENCE.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der_len</code></em> :</span></p></td>
+<td>Length of DER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ret_len</code></em> :</span></p></td>
+<td>Output variable containing the length of the DER data.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str</code></em> :</span></p></td>
+<td>Pre-allocated output buffer to put decoded BIT SEQUENCE in.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>str_size</code></em> :</span></p></td>
+<td>Length of pre-allocated output buffer.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>bit_len</code></em> :</span></p></td>
+<td>Output variable containing the size of the BIT SEQUENCE.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Return <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> on success, or an error.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_get_length_der ()">
+<a name="asn1-get-length-der"></a><h3>asn1_get_length_der ()</h3>
+<pre class="programlisting">signed <span class="returnvalue">long</span>         asn1_get_length_der                 (<em class="parameter"><code>unsigned <span class="type">char</span> *der</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> der_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>);</pre>
+<p>
+Extract a length field from DER data.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der</code></em> :</span></p></td>
+<td>DER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>der_len</code></em> :</span></p></td>
+<td>Length of DER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Output variable containing the length of the DER length field.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Return the decoded length value, or -1 on indefinite
+  length, or -2 when the value was too big.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_get_length_ber ()">
+<a name="asn1-get-length-ber"></a><h3>asn1_get_length_ber ()</h3>
+<pre class="programlisting">signed <span class="returnvalue">long</span>         asn1_get_length_ber                 (<em class="parameter"><code>unsigned <span class="type">char</span> *ber</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> ber_len</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *len</code></em>);</pre>
+<p>
+Extract a length field from BER data.  The difference to
+<a class="link" href="libtasn1-libtasn1.html#asn1-get-length-der" title="asn1_get_length_der ()"><code class="function">asn1_get_length_der()</code></a> is that this function will return a length
+even if the value has indefinite encoding.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ber</code></em> :</span></p></td>
+<td>BER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ber_len</code></em> :</span></p></td>
+<td>Length of BER data to decode.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>Output variable containing the length of the BER length field.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Return the decoded length value, or negative value when
+  the value was too big.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+<p class="since">Since 2.0</p>
+</div>
+<hr>
+<div class="refsect2" title="asn1_length_der ()">
+<a name="asn1-length-der"></a><h3>asn1_length_der ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                asn1_length_der                     (<em class="parameter"><code>unsigned long <a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> len</code></em>,
+                                                         <em class="parameter"><code>unsigned <span class="type">char</span> *ans</code></em>,
+                                                         <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gnutls/gnutls-crypto.html#int"><span class="type">int</span></a> *ans_len</code></em>);</pre>
+<p>
+Creates the DER coding for the LEN parameter (only the length).
+The <em class="parameter"><code>ans</code></em> buffer is pre-allocated and must have room for the output.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>len</code></em> :</span></p></td>
+<td>value to convert.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ans</code></em> :</span></p></td>
+<td>string returned.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ans_len</code></em> :</span></p></td>
+<td>number of meaningful bytes of ANS (ans[0]..ans[ans_len-1]).
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_find_node ()">
+<a name="asn1-find-node"></a><h3>asn1_find_node ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="returnvalue">ASN1_TYPE</span></a>           asn1_find_node                      (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> pointer</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *name</code></em>);</pre>
+<p>
+Searches for an element called <em class="parameter"><code>name</code></em> starting from <em class="parameter"><code>pointer</code></em>.  The
+name is composed by differents identifiers separated by dots.  When
+*<em class="parameter"><code>pointer</code></em> has a name, the first identifier must be the name of
+*<em class="parameter"><code>pointer</code></em>, otherwise it must be the name of one child of *<em class="parameter"><code>pointer</code></em>.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pointer</code></em> :</span></p></td>
+<td>NODE_ASN element pointer.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>null terminated string with the element's name to find.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> the search result, or <code class="literal">NULL</code> if not found.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="asn1_copy_node ()">
+<a name="asn1-copy-node"></a><h3>asn1_copy_node ()</h3>
+<pre class="programlisting"><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="returnvalue">asn1_retCode</span></a>        asn1_copy_node                      (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> dst</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *dst_name</code></em>,
+                                                         <em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#ASN1-TYPE:CAPS" title="ASN1_TYPE"><span class="type">ASN1_TYPE</span></a> src</code></em>,
+                                                         <em class="parameter"><code>const <span class="type">char</span> *src_name</code></em>);</pre>
+<p>
+Create a deep copy of a ASN1_TYPE variable.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dst</code></em> :</span></p></td>
+<td>Destination ASN1_TYPE node.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dst_name</code></em> :</span></p></td>
+<td>Field name in destination node.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src</code></em> :</span></p></td>
+<td>Source ASN1_TYPE node.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>src_name</code></em> :</span></p></td>
+<td>Field name in source node.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Return <a class="link" href="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS" title="ASN1_SUCCESS"><code class="literal">ASN1_SUCCESS</code></a> on success.
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="LIBTASN1_VERSION">
+<a name="LIBTASN1-VERSION:CAPS"></a><h3>LIBTASN1_VERSION</h3>
+<pre class="programlisting">#define LIBTASN1_VERSION ASN1_VERSION
+</pre>
+<div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">LIBTASN1_VERSION</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="MAX_NAME_SIZE">
+<a name="MAX-NAME-SIZE:CAPS"></a><h3>MAX_NAME_SIZE</h3>
+<pre class="programlisting"># define MAX_NAME_SIZE ASN1_MAX_NAME_SIZE
+</pre>
+<div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">MAX_NAME_SIZE</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="MAX_ERROR_DESCRIPTION_SIZE">
+<a name="MAX-ERROR-DESCRIPTION-SIZE:CAPS"></a><h3>MAX_ERROR_DESCRIPTION_SIZE</h3>
+<pre class="programlisting"># define MAX_ERROR_DESCRIPTION_SIZE ASN1_MAX_ERROR_DESCRIPTION_SIZE
+</pre>
+<div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">MAX_ERROR_DESCRIPTION_SIZE</code> is deprecated and should not be used in newly-written code.</p>
+</div>
+<p>
+</p>
+</div>
+<hr>
+<div class="refsect2" title="libtasn1_strerror ()">
+<a name="libtasn1-strerror"></a><h3>libtasn1_strerror ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> *        libtasn1_strerror                   (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);</pre>
+<div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">libtasn1_strerror</code> is deprecated and should not be used in newly-written code. Use <a class="link" href="libtasn1-libtasn1.html#asn1-strerror" title="asn1_strerror ()"><code class="function">asn1_strerror()</code></a> instead.</p>
+</div>
+<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>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>is an error returned by a libtasn1 function.
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td> Pointer to static zero-terminated string describing error
+  code.
+
+</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2" title="libtasn1_perror ()">
+<a name="libtasn1-perror"></a><h3>libtasn1_perror ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>                libtasn1_perror                     (<em class="parameter"><code><a class="link" href="libtasn1-libtasn1.html#asn1-retCode" title="asn1_retCode"><span class="type">asn1_retCode</span></a> error</code></em>);</pre>
+<div class="warning" title="Warning" style="margin-left: 0.5in; margin-right: 0.5in;">
+<h3 class="title">Warning</h3>
+<p><code class="literal">libtasn1_perror</code> is deprecated and should not be used in newly-written code. Use <a class="link" href="libtasn1-libtasn1.html#asn1-perror" title="asn1_perror ()"><code class="function">asn1_perror()</code></a> instead.</p>
+</div>
+<p>
+Prints a string to stderr with a description of an error.  This
+function is like <code class="function">perror()</code>. The only difference is that it accepts
+an error returned by a libtasn1 function.</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
+<td>is an error returned by a libtasn1 function.
+</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+          Generated by GTK-Doc V1.14</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/doc/reference/html/libtasn1.devhelp b/doc/reference/html/libtasn1.devhelp
new file mode 100644 (file)
index 0000000..714ef69
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="GNU Libtasn1 API Reference Manual" link="index.html" author="" name="libtasn1">
+  <chapters>
+    <sub name="GNU Libtasn1 API Reference Manual" link="ch01.html">
+      <sub name="libtasn1" link="libtasn1-libtasn1.html"/>
+    </sub>
+    <sub name="Index" link="ix01.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>
+    <function name="ASN1_API" link="libtasn1-libtasn1.html#ASN1-API:CAPS"/>
+    <function name="ASN1_VERSION" link="libtasn1-libtasn1.html#ASN1-VERSION:CAPS"/>
+    <function name="asn1_retCode" link="libtasn1-libtasn1.html#asn1-retCode"/>
+    <function name="ASN1_SUCCESS" link="libtasn1-libtasn1.html#ASN1-SUCCESS:CAPS"/>
+    <function name="ASN1_FILE_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-FILE-NOT-FOUND:CAPS"/>
+    <function name="ASN1_ELEMENT_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-FOUND:CAPS"/>
+    <function name="ASN1_IDENTIFIER_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-IDENTIFIER-NOT-FOUND:CAPS"/>
+    <function name="ASN1_DER_ERROR" link="libtasn1-libtasn1.html#ASN1-DER-ERROR:CAPS"/>
+    <function name="ASN1_VALUE_NOT_FOUND" link="libtasn1-libtasn1.html#ASN1-VALUE-NOT-FOUND:CAPS"/>
+    <function name="ASN1_GENERIC_ERROR" link="libtasn1-libtasn1.html#ASN1-GENERIC-ERROR:CAPS"/>
+    <function name="ASN1_VALUE_NOT_VALID" link="libtasn1-libtasn1.html#ASN1-VALUE-NOT-VALID:CAPS"/>
+    <function name="ASN1_TAG_ERROR" link="libtasn1-libtasn1.html#ASN1-TAG-ERROR:CAPS"/>
+    <function name="ASN1_TAG_IMPLICIT" link="libtasn1-libtasn1.html#ASN1-TAG-IMPLICIT:CAPS"/>
+    <function name="ASN1_ERROR_TYPE_ANY" link="libtasn1-libtasn1.html#ASN1-ERROR-TYPE-ANY:CAPS"/>
+    <function name="ASN1_SYNTAX_ERROR" link="libtasn1-libtasn1.html#ASN1-SYNTAX-ERROR:CAPS"/>
+    <function name="ASN1_MEM_ERROR" link="libtasn1-libtasn1.html#ASN1-MEM-ERROR:CAPS"/>
+    <function name="ASN1_MEM_ALLOC_ERROR" link="libtasn1-libtasn1.html#ASN1-MEM-ALLOC-ERROR:CAPS"/>
+    <function name="ASN1_DER_OVERFLOW" link="libtasn1-libtasn1.html#ASN1-DER-OVERFLOW:CAPS"/>
+    <function name="ASN1_NAME_TOO_LONG" link="libtasn1-libtasn1.html#ASN1-NAME-TOO-LONG:CAPS"/>
+    <function name="ASN1_ARRAY_ERROR" link="libtasn1-libtasn1.html#ASN1-ARRAY-ERROR:CAPS"/>
+    <function name="ASN1_ELEMENT_NOT_EMPTY" link="libtasn1-libtasn1.html#ASN1-ELEMENT-NOT-EMPTY:CAPS"/>
+    <function name="ASN1_PRINT_NAME" link="libtasn1-libtasn1.html#ASN1-PRINT-NAME:CAPS"/>
+    <function name="ASN1_PRINT_NAME_TYPE" link="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE:CAPS"/>
+    <function name="ASN1_PRINT_NAME_TYPE_VALUE" link="libtasn1-libtasn1.html#ASN1-PRINT-NAME-TYPE-VALUE:CAPS"/>
+    <function name="ASN1_PRINT_ALL" link="libtasn1-libtasn1.html#ASN1-PRINT-ALL:CAPS"/>
+    <function name="ASN1_CLASS_UNIVERSAL" link="libtasn1-libtasn1.html#ASN1-CLASS-UNIVERSAL:CAPS"/>
+    <function name="ASN1_CLASS_APPLICATION" link="libtasn1-libtasn1.html#ASN1-CLASS-APPLICATION:CAPS"/>
+    <function name="ASN1_CLASS_CONTEXT_SPECIFIC" link="libtasn1-libtasn1.html#ASN1-CLASS-CONTEXT-SPECIFIC:CAPS"/>
+    <function name="ASN1_CLASS_PRIVATE" link="libtasn1-libtasn1.html#ASN1-CLASS-PRIVATE:CAPS"/>
+    <function name="ASN1_CLASS_STRUCTURED" link="libtasn1-libtasn1.html#ASN1-CLASS-STRUCTURED:CAPS"/>
+    <function name="ASN1_TAG_BOOLEAN" link="libtasn1-libtasn1.html#ASN1-TAG-BOOLEAN:CAPS"/>
+    <function name="ASN1_TAG_INTEGER" link="libtasn1-libtasn1.html#ASN1-TAG-INTEGER:CAPS"/>
+    <function name="ASN1_TAG_SEQUENCE" link="libtasn1-libtasn1.html#ASN1-TAG-SEQUENCE:CAPS"/>
+    <function name="ASN1_TAG_SET" link="libtasn1-libtasn1.html#ASN1-TAG-SET:CAPS"/>
+    <function name="ASN1_TAG_OCTET_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-OCTET-STRING:CAPS"/>
+    <function name="ASN1_TAG_BIT_STRING" link="libtasn1-libtasn1.html#ASN1-TAG-BIT-STRING:CAPS"/>
+    <function name="ASN1_TAG_UTCTime" link="libtasn1-libtasn1.html#ASN1-TAG-UTCTime"/>
+    <function name="ASN1_TAG_GENERALIZEDTime" link="libtasn1-libtasn1.html#ASN1-TAG-GENERALIZEDTime"/>
+    <function name="ASN1_TAG_OBJECT_ID" link="libtasn1-libtasn1.html#ASN1-TAG-OBJECT-ID:CAPS"/>
+    <function name="ASN1_TAG_ENUMERATED" link="libtasn1-libtasn1.html#ASN1-TAG-ENUMERATED:CAPS"/>
+    <function name="ASN1_TAG_NULL" link="libtasn1-libtasn1.html#ASN1-TAG-NULL:CAPS"/>
+    <function name="ASN1_TAG_GENERALSTRING" link="libtasn1-libtasn1.html#ASN1-TAG-GENERALSTRING:CAPS"/>
+    <function name="node_asn" link="libtasn1-libtasn1.html#node-asn"/>
+    <function name="ASN1_TYPE" link="libtasn1-libtasn1.html#ASN1-TYPE:CAPS"/>
+    <function name="ASN1_TYPE_EMPTY" link="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS"/>
+    <function name="ASN1_ARRAY_TYPE" link="libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS"/>
+    <function name="ASN1_MAX_NAME_SIZE" link="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS"/>
+    <function name="ASN1_MAX_ERROR_DESCRIPTION_SIZE" link="libtasn1-libtasn1.html#ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS"/>
+    <function name="asn1_parser2tree ()" link="libtasn1-libtasn1.html#asn1-parser2tree"/>
+    <function name="asn1_parser2array ()" link="libtasn1-libtasn1.html#asn1-parser2array"/>
+    <function name="asn1_array2tree ()" link="libtasn1-libtasn1.html#asn1-array2tree"/>
+    <function name="asn1_print_structure ()" link="libtasn1-libtasn1.html#asn1-print-structure"/>
+    <function name="asn1_create_element ()" link="libtasn1-libtasn1.html#asn1-create-element"/>
+    <function name="asn1_delete_structure ()" link="libtasn1-libtasn1.html#asn1-delete-structure"/>
+    <function name="asn1_delete_element ()" link="libtasn1-libtasn1.html#asn1-delete-element"/>
+    <function name="asn1_write_value ()" link="libtasn1-libtasn1.html#asn1-write-value"/>
+    <function name="asn1_read_value ()" link="libtasn1-libtasn1.html#asn1-read-value"/>
+    <function name="asn1_number_of_elements ()" link="libtasn1-libtasn1.html#asn1-number-of-elements"/>
+    <function name="asn1_der_coding ()" link="libtasn1-libtasn1.html#asn1-der-coding"/>
+    <function name="asn1_der_decoding ()" link="libtasn1-libtasn1.html#asn1-der-decoding"/>
+    <function name="asn1_der_decoding_element ()" link="libtasn1-libtasn1.html#asn1-der-decoding-element"/>
+    <function name="asn1_der_decoding_startEnd ()" link="libtasn1-libtasn1.html#asn1-der-decoding-startEnd"/>
+    <function name="asn1_expand_any_defined_by ()" link="libtasn1-libtasn1.html#asn1-expand-any-defined-by"/>
+    <function name="asn1_expand_octet_string ()" link="libtasn1-libtasn1.html#asn1-expand-octet-string"/>
+    <function name="asn1_read_tag ()" link="libtasn1-libtasn1.html#asn1-read-tag"/>
+    <function name="asn1_find_structure_from_oid ()" link="libtasn1-libtasn1.html#asn1-find-structure-from-oid"/>
+    <function name="asn1_check_version ()" link="libtasn1-libtasn1.html#asn1-check-version"/>
+    <function name="asn1_strerror ()" link="libtasn1-libtasn1.html#asn1-strerror"/>
+    <function name="asn1_perror ()" link="libtasn1-libtasn1.html#asn1-perror"/>
+    <function name="asn1_get_tag_der ()" link="libtasn1-libtasn1.html#asn1-get-tag-der"/>
+    <function name="asn1_octet_der ()" link="libtasn1-libtasn1.html#asn1-octet-der"/>
+    <function name="asn1_get_octet_der ()" link="libtasn1-libtasn1.html#asn1-get-octet-der"/>
+    <function name="asn1_bit_der ()" link="libtasn1-libtasn1.html#asn1-bit-der"/>
+    <function name="asn1_get_bit_der ()" link="libtasn1-libtasn1.html#asn1-get-bit-der"/>
+    <function name="asn1_get_length_der ()" link="libtasn1-libtasn1.html#asn1-get-length-der"/>
+    <function name="asn1_get_length_ber ()" link="libtasn1-libtasn1.html#asn1-get-length-ber"/>
+    <function name="asn1_length_der ()" link="libtasn1-libtasn1.html#asn1-length-der"/>
+    <function name="asn1_find_node ()" link="libtasn1-libtasn1.html#asn1-find-node"/>
+    <function name="asn1_copy_node ()" link="libtasn1-libtasn1.html#asn1-copy-node"/>
+    <function name="LIBTASN1_VERSION" link="libtasn1-libtasn1.html#LIBTASN1-VERSION:CAPS"/>
+    <function name="MAX_NAME_SIZE" link="libtasn1-libtasn1.html#MAX-NAME-SIZE:CAPS"/>
+    <function name="MAX_ERROR_DESCRIPTION_SIZE" link="libtasn1-libtasn1.html#MAX-ERROR-DESCRIPTION-SIZE:CAPS"/>
+    <function name="libtasn1_strerror ()" link="libtasn1-libtasn1.html#libtasn1-strerror"/>
+    <function name="libtasn1_perror ()" link="libtasn1-libtasn1.html#libtasn1-perror"/>
+  </functions>
+</book>
diff --git a/doc/reference/html/libtasn1.devhelp2 b/doc/reference/html/libtasn1.devhelp2
new file mode 100644 (file)
index 0000000..f51e5a4
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<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="ch01.html">
+      <sub name="libtasn1" link="libtasn1-libtasn1.html"/>
+    </sub>
+    <sub name="Index" link="ix01.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="typedef" name="asn1_retCode" link="libtasn1-libtasn1.html#asn1-retCode"/>
+    <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="typedef" name="node_asn" link="libtasn1-libtasn1.html#node-asn"/>
+    <keyword type="typedef" name="ASN1_TYPE" link="libtasn1-libtasn1.html#ASN1-TYPE:CAPS"/>
+    <keyword type="macro" name="ASN1_TYPE_EMPTY" link="libtasn1-libtasn1.html#ASN1-TYPE-EMPTY:CAPS"/>
+    <keyword type="typedef" name="ASN1_ARRAY_TYPE" link="libtasn1-libtasn1.html#ASN1-ARRAY-TYPE:CAPS"/>
+    <keyword type="macro" name="ASN1_MAX_NAME_SIZE" link="libtasn1-libtasn1.html#ASN1-MAX-NAME-SIZE:CAPS"/>
+    <keyword type="macro" name="ASN1_MAX_ERROR_DESCRIPTION_SIZE" link="libtasn1-libtasn1.html#ASN1-MAX-ERROR-DESCRIPTION-SIZE:CAPS"/>
+    <keyword type="function" name="asn1_parser2tree ()" link="libtasn1-libtasn1.html#asn1-parser2tree"/>
+    <keyword type="function" name="asn1_parser2array ()" link="libtasn1-libtasn1.html#asn1-parser2array"/>
+    <keyword type="function" name="asn1_array2tree ()" link="libtasn1-libtasn1.html#asn1-array2tree"/>
+    <keyword type="function" name="asn1_print_structure ()" link="libtasn1-libtasn1.html#asn1-print-structure"/>
+    <keyword type="function" name="asn1_create_element ()" link="libtasn1-libtasn1.html#asn1-create-element"/>
+    <keyword type="function" name="asn1_delete_structure ()" link="libtasn1-libtasn1.html#asn1-delete-structure"/>
+    <keyword type="function" name="asn1_delete_element ()" link="libtasn1-libtasn1.html#asn1-delete-element"/>
+    <keyword type="function" name="asn1_write_value ()" link="libtasn1-libtasn1.html#asn1-write-value"/>
+    <keyword type="function" name="asn1_read_value ()" link="libtasn1-libtasn1.html#asn1-read-value"/>
+    <keyword type="function" name="asn1_number_of_elements ()" link="libtasn1-libtasn1.html#asn1-number-of-elements"/>
+    <keyword type="function" name="asn1_der_coding ()" link="libtasn1-libtasn1.html#asn1-der-coding"/>
+    <keyword type="function" name="asn1_der_decoding ()" link="libtasn1-libtasn1.html#asn1-der-decoding"/>
+    <keyword type="function" name="asn1_der_decoding_element ()" link="libtasn1-libtasn1.html#asn1-der-decoding-element"/>
+    <keyword type="function" name="asn1_der_decoding_startEnd ()" link="libtasn1-libtasn1.html#asn1-der-decoding-startEnd"/>
+    <keyword type="function" name="asn1_expand_any_defined_by ()" link="libtasn1-libtasn1.html#asn1-expand-any-defined-by"/>
+    <keyword type="function" name="asn1_expand_octet_string ()" link="libtasn1-libtasn1.html#asn1-expand-octet-string"/>
+    <keyword type="function" name="asn1_read_tag ()" link="libtasn1-libtasn1.html#asn1-read-tag"/>
+    <keyword type="function" name="asn1_find_structure_from_oid ()" link="libtasn1-libtasn1.html#asn1-find-structure-from-oid"/>
+    <keyword type="function" name="asn1_check_version ()" link="libtasn1-libtasn1.html#asn1-check-version"/>
+    <keyword type="function" name="asn1_strerror ()" link="libtasn1-libtasn1.html#asn1-strerror" since="1.6"/>
+    <keyword type="function" name="asn1_perror ()" link="libtasn1-libtasn1.html#asn1-perror" since="1.6"/>
+    <keyword type="function" name="asn1_get_tag_der ()" link="libtasn1-libtasn1.html#asn1-get-tag-der"/>
+    <keyword type="function" name="asn1_octet_der ()" link="libtasn1-libtasn1.html#asn1-octet-der"/>
+    <keyword type="function" name="asn1_get_octet_der ()" link="libtasn1-libtasn1.html#asn1-get-octet-der"/>
+    <keyword type="function" name="asn1_bit_der ()" link="libtasn1-libtasn1.html#asn1-bit-der"/>
+    <keyword type="function" name="asn1_get_bit_der ()" link="libtasn1-libtasn1.html#asn1-get-bit-der"/>
+    <keyword type="function" name="asn1_get_length_der ()" link="libtasn1-libtasn1.html#asn1-get-length-der"/>
+    <keyword type="function" name="asn1_get_length_ber ()" link="libtasn1-libtasn1.html#asn1-get-length-ber" since="2.0"/>
+    <keyword type="function" name="asn1_length_der ()" link="libtasn1-libtasn1.html#asn1-length-der"/>
+    <keyword type="function" name="asn1_find_node ()" link="libtasn1-libtasn1.html#asn1-find-node"/>
+    <keyword type="function" name="asn1_copy_node ()" link="libtasn1-libtasn1.html#asn1-copy-node"/>
+    <keyword type="macro" name="LIBTASN1_VERSION" link="libtasn1-libtasn1.html#LIBTASN1-VERSION:CAPS" deprecated=""/>
+    <keyword type="macro" name="MAX_NAME_SIZE" link="libtasn1-libtasn1.html#MAX-NAME-SIZE:CAPS" deprecated=""/>
+    <keyword type="macro" name="MAX_ERROR_DESCRIPTION_SIZE" link="libtasn1-libtasn1.html#MAX-ERROR-DESCRIPTION-SIZE:CAPS" deprecated=""/>
+    <keyword type="function" name="libtasn1_strerror ()" link="libtasn1-libtasn1.html#libtasn1-strerror" deprecated="Use asn1_strerror() instead."/>
+    <keyword type="function" name="libtasn1_perror ()" link="libtasn1-libtasn1.html#libtasn1-perror" deprecated="Use asn1_perror() instead."/>
+  </functions>
+</book>
diff --git a/doc/reference/html/right.png b/doc/reference/html/right.png
new file mode 100644 (file)
index 0000000..92832e3
Binary files /dev/null and b/doc/reference/html/right.png differ
diff --git a/doc/reference/html/style.css b/doc/reference/html/style.css
new file mode 100644 (file)
index 0000000..82115eb
--- /dev/null
@@ -0,0 +1,257 @@
+.synopsis, .classsynopsis
+{
+  /* tango:aluminium 1/2 */
+  background: #eeeeec;
+  border: solid 1px #d3d7cf;
+  padding: 0.5em;
+}
+.programlisting
+{
+  /* tango:sky blue 0/1 */
+  background: #e6f3ff;
+  border: solid 1px #729fcf;
+  padding: 0.5em;
+}
+.variablelist
+{
+  padding: 4px;
+  margin-left: 3em;
+}
+.variablelist td:first-child
+{
+  vertical-align: top;
+}
+
+@media screen {
+  sup 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]
+  {
+    position: relative;
+    padding-top:4.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: 3.2em;
+    padding-bottom: 20em;
+  }
+  /* style and size the navigation bar */
+  table.navigation#top
+  {
+    position: fixed;
+    /* tango:scarlet red 0/1 */
+    background: #ffe6e6;
+    border: solid 1px #ef2929;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+    z-index: 10;
+  }
+  .navigation a, .navigation a:visited
+  {
+    /* tango:scarlet red 3 */
+    color: #a40000;
+  }
+  .navigation a:hover
+  {
+    /* tango:scarlet red 1 */
+    color: #ef2929;
+  }
+  td.shortcuts
+  {
+    /* tango:scarlet red 1 */
+    color: #ef2929;
+    font-size: 80%;
+    white-space: nowrap;
+  }
+}
+@media print {
+  table.navigation {
+    visibility: collapse;
+    display: none;
+  }
+  div.titlepage table.navigation {
+    visibility: visible;
+    display: table;
+    /* tango:scarlet red 0/1 */
+    background: #ffe6e6;
+    border: solid 1px #ef2929;
+    margin-top: 0;
+    margin-bottom: 0;
+    top: 0;
+    left: 0;
+    height: 3em;
+  }
+}
+
+.navigation .title
+{
+  font-size: 200%;
+}
+
+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.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;
+}
+
+hr
+{
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  background: #babdb6;
+  border: none 0px;
+  height: 1px;
+  clear: both;
+}
+
+.footer
+{
+  padding-top: 3.5em;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  text-align: center;
+  font-size: 80%;
+}
+
+.warning
+{
+  /* tango:orange 0/1 */
+  background: #ffeed9;
+  border-color: #ffb04f;
+}
+.note
+{
+  /* tango:chameleon 0/0.5 */
+  background: #d8ffb2;
+  border-color: #abf562;
+}
+.note, .warning
+{
+  padding: 0.5em;
+  border-width: 1px;
+  border-style: solid;
+}
+.note h3, .warning h3
+{
+  margin-top: 0.0em
+}
+.note p, .warning p
+{
+  margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+  float: right;
+  /* tango:aluminium 3 */
+  color: #babdb6;
+  font-size: 80%;
+  font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket   { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment    { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function   { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword    { color: #4e9a06; } /* tango: chameleon 3  */
+.listing_code .programlisting .linenum    { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal     { color: #000000; }
+.listing_code .programlisting .number     { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc    { color: #204a87; } /* tango: sky blue 3  */
+.listing_code .programlisting .string     { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type       { color: #000000; }
+.listing_code .programlisting .type a     { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol     { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+  /* tango:sky blue 1 */
+  border: solid 1px #729fcf;
+  padding: 0px;
+}
+
+.listing_lines, .listing_code {
+  margin-top: 0px;
+  margin-bottom: 0px;
+  padding: 0.5em;
+}
+.listing_lines {
+  /* tango:sky blue 0.5 */
+  background: #a6c5e3;
+  /* tango:aluminium 6 */
+  color: #2e3436;
+}
+.listing_code {
+  /* tango:sky blue 0 */
+  background: #e6f3ff;
+}
+.listing_code .programlisting {
+  /* override from previous */
+  border: none 0px;
+  padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+  margin: 0px;
+}
+
diff --git a/doc/reference/html/up.png b/doc/reference/html/up.png
new file mode 100644 (file)
index 0000000..85b3e2a
Binary files /dev/null and b/doc/reference/html/up.png differ
diff --git a/doc/reference/libtasn1-docs.sgml b/doc/reference/libtasn1-docs.sgml
new file mode 100644 (file)
index 0000000..ee3b3af
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
+<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
+  <bookinfo>
+    <title>GNU Libtasn1 API Reference Manual</title>
+  </bookinfo>
+
+  <chapter>
+    <title>GNU Libtasn1 API Reference Manual</title>
+
+    <para>
+      This document describes the GNU Libtasn1 library developed for
+      ASN.1 (Abstract Syntax Notation One) structures management and
+      DER (Distinguished Encoding Rules) encoding functions.
+    </para>
+
+    <para>
+      More up to date information can be found at
+      <ulink url="http://www.gnu.org/software/libtasn1/">
+       http://www.gnu.org/software/libtasn1/</ulink>.
+    </para>
+
+    <xi:include href="xml/libtasn1.xml"/>
+  </chapter>
+
+  <index>
+    <title>Index</title>
+  </index>
+  <index role="deprecated">
+    <title>Index of deprecated symbols</title>
+  </index>
+  <index role="1.6">
+    <title>Index of new symbols in 1.6</title>
+  </index>
+  <index role="2.0">
+    <title>Index of new symbols in 2.0</title>
+  </index>
+</book>
diff --git a/doc/reference/libtasn1-overrides.txt b/doc/reference/libtasn1-overrides.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/doc/reference/libtasn1-sections.txt b/doc/reference/libtasn1-sections.txt
new file mode 100644 (file)
index 0000000..0b1d941
--- /dev/null
@@ -0,0 +1,88 @@
+<SECTION>
+<FILE>libtasn1</FILE>
+ASN1_API
+ASN1_VERSION
+asn1_retCode
+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
+node_asn
+ASN1_TYPE
+ASN1_TYPE_EMPTY
+ASN1_ARRAY_TYPE
+ASN1_MAX_NAME_SIZE
+ASN1_MAX_ERROR_DESCRIPTION_SIZE
+asn1_parser2tree
+asn1_parser2array
+asn1_array2tree
+asn1_print_structure
+asn1_create_element
+asn1_delete_structure
+asn1_delete_element
+asn1_write_value
+asn1_read_value
+asn1_number_of_elements
+asn1_der_coding
+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_get_tag_der
+asn1_octet_der
+asn1_get_octet_der
+asn1_bit_der
+asn1_get_bit_der
+asn1_get_length_der
+asn1_get_length_ber
+asn1_length_der
+asn1_find_node
+asn1_copy_node
+LIBTASN1_VERSION
+MAX_NAME_SIZE
+MAX_ERROR_DESCRIPTION_SIZE
+libtasn1_strerror
+libtasn1_perror
+</SECTION>
+
diff --git a/doc/reference/libtasn1.pdf b/doc/reference/libtasn1.pdf
new file mode 100644 (file)
index 0000000..fe0fcb3
Binary files /dev/null and b/doc/reference/libtasn1.pdf differ
diff --git a/doc/reference/libtasn1.types b/doc/reference/libtasn1.types
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/doc/reference/tmpl/libtasn1-unused.sgml b/doc/reference/tmpl/libtasn1-unused.sgml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/doc/reference/tmpl/libtasn1.sgml b/doc/reference/tmpl/libtasn1.sgml
new file mode 100644 (file)
index 0000000..02635df
--- /dev/null
@@ -0,0 +1,743 @@
+<!-- ##### 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>
+
+
+
+<!-- ##### TYPEDEF asn1_retCode ##### -->
+<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>
+
+
+
+<!-- ##### TYPEDEF node_asn ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### TYPEDEF ASN1_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ASN1_TYPE_EMPTY ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### TYPEDEF ASN1_ARRAY_TYPE ##### -->
+<para>
+
+</para>
+
+
+<!-- ##### MACRO ASN1_MAX_NAME_SIZE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO ASN1_MAX_ERROR_DESCRIPTION_SIZE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION asn1_parser2tree ##### -->
+<para>
+
+</para>
+
+@file_name: 
+@definitions: 
+@errorDescription: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_parser2array ##### -->
+<para>
+
+</para>
+
+@inputFileName: 
+@outputFileName: 
+@vectorName: 
+@errorDescription: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_array2tree ##### -->
+<para>
+
+</para>
+
+@array: 
+@definitions: 
+@errorDescription: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_print_structure ##### -->
+<para>
+
+</para>
+
+@out: 
+@structure: 
+@name: 
+@mode: 
+
+
+<!-- ##### FUNCTION asn1_create_element ##### -->
+<para>
+
+</para>
+
+@definitions: 
+@source_name: 
+@element: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_delete_structure ##### -->
+<para>
+
+</para>
+
+@structure: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_delete_element ##### -->
+<para>
+
+</para>
+
+@structure: 
+@element_name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_write_value ##### -->
+<para>
+
+</para>
+
+@node_root: 
+@name: 
+@ivalue: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_read_value ##### -->
+<para>
+
+</para>
+
+@root: 
+@name: 
+@ivalue: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_number_of_elements ##### -->
+<para>
+
+</para>
+
+@element: 
+@name: 
+@num: 
+@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_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_expand_any_defined_by ##### -->
+<para>
+
+</para>
+
+@definitions: 
+@element: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_expand_octet_string ##### -->
+<para>
+
+</para>
+
+@definitions: 
+@element: 
+@octetName: 
+@objectName: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_read_tag ##### -->
+<para>
+
+</para>
+
+@root: 
+@name: 
+@tagValue: 
+@classValue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_find_structure_from_oid ##### -->
+<para>
+
+</para>
+
+@definitions: 
+@oidValue: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_check_version ##### -->
+<para>
+
+</para>
+
+@req_version: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_strerror ##### -->
+<para>
+
+</para>
+
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_perror ##### -->
+<para>
+
+</para>
+
+@error: 
+
+
+<!-- ##### FUNCTION asn1_get_tag_der ##### -->
+<para>
+
+</para>
+
+@der: 
+@der_len: 
+@cls: 
+@len: 
+@tag: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_octet_der ##### -->
+<para>
+
+</para>
+
+@str: 
+@str_len: 
+@der: 
+@der_len: 
+
+
+<!-- ##### FUNCTION asn1_get_octet_der ##### -->
+<para>
+
+</para>
+
+@der: 
+@der_len: 
+@ret_len: 
+@str: 
+@str_size: 
+@str_len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_bit_der ##### -->
+<para>
+
+</para>
+
+@str: 
+@bit_len: 
+@der: 
+@der_len: 
+
+
+<!-- ##### FUNCTION asn1_get_bit_der ##### -->
+<para>
+
+</para>
+
+@der: 
+@der_len: 
+@ret_len: 
+@str: 
+@str_size: 
+@bit_len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_get_length_der ##### -->
+<para>
+
+</para>
+
+@der: 
+@der_len: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_get_length_ber ##### -->
+<para>
+
+</para>
+
+@ber: 
+@ber_len: 
+@len: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_length_der ##### -->
+<para>
+
+</para>
+
+@len: 
+@ans: 
+@ans_len: 
+
+
+<!-- ##### FUNCTION asn1_find_node ##### -->
+<para>
+
+</para>
+
+@pointer: 
+@name: 
+@Returns: 
+
+
+<!-- ##### FUNCTION asn1_copy_node ##### -->
+<para>
+
+</para>
+
+@dst: 
+@dst_name: 
+@src: 
+@src_name: 
+@Returns: 
+
+
+<!-- ##### MACRO LIBTASN1_VERSION ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO MAX_NAME_SIZE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### MACRO MAX_ERROR_DESCRIPTION_SIZE ##### -->
+<para>
+
+</para>
+
+
+
+<!-- ##### FUNCTION libtasn1_strerror ##### -->
+<para>
+
+</para>
+
+@error: 
+@Returns: 
+
+
+<!-- ##### FUNCTION libtasn1_perror ##### -->
+<para>
+
+</para>
+
+@error: 
+
+
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644 (file)
index 0000000..6009cd1
--- /dev/null
@@ -0,0 +1,4 @@
+@set UPDATED 20 April 2010
+@set UPDATED-MONTH April 2010
+@set EDITION 2.7
+@set VERSION 2.7
diff --git a/doc/texi/ASN1.c.texi b/doc/texi/ASN1.c.texi
new file mode 100644 (file)
index 0000000..1247bb5
--- /dev/null
@@ -0,0 +1,40 @@
+@subheading asn1_parser2tree
+@anchor{asn1_parser2tree}
+@deftypefun {asn1_retCode} {asn1_parser2tree} (const char * @var{file_name}, ASN1_TYPE * @var{definitions}, char * @var{errorDescription})
+@var{file_name}: specify the path and the name of file that contains
+ASN.1 declarations.
+
+@var{definitions}: return the pointer to the structure created from
+"file_name" ASN.1 declarations.
+
+@var{errorDescription}: 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_name} file.
+
+@strong{Returns:} @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{errorDescription})
+@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{errorDescription}: 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:} @end deftypefun
+
diff --git a/doc/texi/asn1_array2tree.texi b/doc/texi/asn1_array2tree.texi
new file mode 100644 (file)
index 0000000..f0fda96
--- /dev/null
@@ -0,0 +1,15 @@
+@subheading asn1_array2tree
+@anchor{asn1_array2tree}
+@deftypefun {asn1_retCode} {asn1_array2tree} (const ASN1_ARRAY_TYPE * @var{array}, ASN1_TYPE * @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:} @end deftypefun
+
diff --git a/doc/texi/asn1_bit_der.texi b/doc/texi/asn1_bit_der.texi
new file mode 100644 (file)
index 0000000..eb0f379
--- /dev/null
@@ -0,0 +1,16 @@
+@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 the DER coding for a BIT STRING type (length and pad
+included).
+@end deftypefun
+
diff --git a/doc/texi/asn1_check_version.texi b/doc/texi/asn1_check_version.texi
new file mode 100644 (file)
index 0000000..cc6b42b
--- /dev/null
@@ -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 (file)
index 0000000..7852a51
--- /dev/null
@@ -0,0 +1,16 @@
+@subheading asn1_copy_node
+@anchor{asn1_copy_node}
+@deftypefun {asn1_retCode} {asn1_copy_node} (ASN1_TYPE @var{dst}, const char * @var{dst_name}, ASN1_TYPE @var{src}, const char * @var{src_name})
+@var{dst}: Destination ASN1_TYPE node.
+
+@var{dst_name}: Field name in destination node.
+
+@var{src}: Source ASN1_TYPE node.
+
+@var{src_name}: Field name in source node.
+
+Create a deep copy of a ASN1_TYPE variable.
+
+@strong{Return value:} 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 (file)
index 0000000..1127a83
--- /dev/null
@@ -0,0 +1,17 @@
+@subheading asn1_create_element
+@anchor{asn1_create_element}
+@deftypefun {asn1_retCode} {asn1_create_element} (ASN1_TYPE @var{definitions}, const char * @var{source_name}, ASN1_TYPE * @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:} @end deftypefun
+
diff --git a/doc/texi/asn1_delete_element.texi b/doc/texi/asn1_delete_element.texi
new file mode 100644 (file)
index 0000000..66e70de
--- /dev/null
@@ -0,0 +1,12 @@
+@subheading asn1_delete_element
+@anchor{asn1_delete_element}
+@deftypefun {asn1_retCode} {asn1_delete_element} (ASN1_TYPE @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:} @end deftypefun
+
diff --git a/doc/texi/asn1_delete_structure.texi b/doc/texi/asn1_delete_structure.texi
new file mode 100644 (file)
index 0000000..c988dc2
--- /dev/null
@@ -0,0 +1,10 @@
+@subheading asn1_delete_structure
+@anchor{asn1_delete_structure}
+@deftypefun {asn1_retCode} {asn1_delete_structure} (ASN1_TYPE * @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 ASN1_TYPE_EMPTY.
+
+@strong{Returns:} @end deftypefun
+
diff --git a/doc/texi/asn1_der_coding.texi b/doc/texi/asn1_der_coding.texi
new file mode 100644 (file)
index 0000000..2af3779
--- /dev/null
@@ -0,0 +1,19 @@
+@subheading asn1_der_coding
+@anchor{asn1_der_coding}
+@deftypefun {asn1_retCode} {asn1_der_coding} (ASN1_TYPE @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.
+
+Creates the DER encoding for the NAME structure (inside *POINTER
+structure).
+
+@strong{Returns:} @end deftypefun
+
diff --git a/doc/texi/asn1_der_decoding.texi b/doc/texi/asn1_der_decoding.texi
new file mode 100644 (file)
index 0000000..401fd57
--- /dev/null
@@ -0,0 +1,24 @@
+@subheading asn1_der_decoding
+@anchor{asn1_der_decoding}
+@deftypefun {asn1_retCode} {asn1_der_decoding} (ASN1_TYPE * @var{element}, const void * @var{ider}, int @var{len}, char * @var{errorDescription})
+@var{element}: pointer to an ASN1 structure.
+
+@var{ider}: vector that contains the DER encoding.
+
+@var{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()}.  If an error occurs during the decoding
+procedure, the *@code{ELEMENT} is deleted and set equal to
+@code{ASN1_TYPE_EMPTY}.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND}
+if @code{ELEMENT} is @code{ASN1_TYPE_EMPTY}, 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 (file)
index 0000000..c46a09f
--- /dev/null
@@ -0,0 +1,27 @@
+@subheading asn1_der_decoding_element
+@anchor{asn1_der_decoding_element}
+@deftypefun {asn1_retCode} {asn1_der_decoding_element} (ASN1_TYPE * @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{ASN1_TYPE_EMPTY}.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND}
+if ELEMENT is @code{ASN1_TYPE_EMPTY} 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 (file)
index 0000000..8c74b56
--- /dev/null
@@ -0,0 +1,32 @@
+@subheading asn1_der_decoding_startEnd
+@anchor{asn1_der_decoding_startEnd}
+@deftypefun {asn1_retCode} {asn1_der_decoding_startEnd} (ASN1_TYPE @var{element}, const void * @var{ider}, int @var{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{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.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND}
+if ELEMENT is @code{ASN1_TYPE} 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_expand_any_defined_by.texi b/doc/texi/asn1_expand_any_defined_by.texi
new file mode 100644 (file)
index 0000000..febd9cf
--- /dev/null
@@ -0,0 +1,19 @@
+@subheading asn1_expand_any_defined_by
+@anchor{asn1_expand_any_defined_by}
+@deftypefun {asn1_retCode} {asn1_expand_any_defined_by} (ASN1_TYPE @var{definitions}, ASN1_TYPE * @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 (file)
index 0000000..e01f6bb
--- /dev/null
@@ -0,0 +1,23 @@
+@subheading asn1_expand_octet_string
+@anchor{asn1_expand_octet_string}
+@deftypefun {asn1_retCode} {asn1_expand_octet_string} (ASN1_TYPE @var{definitions}, ASN1_TYPE * @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 (file)
index 0000000..ce4c262
--- /dev/null
@@ -0,0 +1,15 @@
+@subheading asn1_find_node
+@anchor{asn1_find_node}
+@deftypefun {ASN1_TYPE} {asn1_find_node} (ASN1_TYPE @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 (file)
index 0000000..e8dc2d1
--- /dev/null
@@ -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_TYPE @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 (file)
index 0000000..345a845
--- /dev/null
@@ -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:} Return @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 (file)
index 0000000..4bf22e9
--- /dev/null
@@ -0,0 +1,19 @@
+@subheading asn1_get_length_ber
+@anchor{asn1_get_length_ber}
+@deftypefun {signed 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 (file)
index 0000000..20749af
--- /dev/null
@@ -0,0 +1,15 @@
+@subheading asn1_get_length_der
+@anchor{asn1_get_length_der}
+@deftypefun {signed 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.
+@end deftypefun
+
diff --git a/doc/texi/asn1_get_octet_der.texi b/doc/texi/asn1_get_octet_der.texi
new file mode 100644 (file)
index 0000000..fcb2454
--- /dev/null
@@ -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 (file)
index 0000000..103a2c6
--- /dev/null
@@ -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 (file)
index 0000000..8be2bec
--- /dev/null
@@ -0,0 +1,13 @@
+@subheading asn1_length_der
+@anchor{asn1_length_der}
+@deftypefun {void} {asn1_length_der} (unsigned long int @var{len}, unsigned char * @var{ans}, int * @var{ans_len})
+@var{len}: value to convert.
+
+@var{ans}: string returned.
+
+@var{ans_len}: number of meaningful bytes of ANS (ans[0]..ans[ans_len-1]).
+
+Creates the DER coding for the LEN parameter (only the length).
+The @code{ans} buffer is pre-allocated and must have room for the output.
+@end deftypefun
+
diff --git a/doc/texi/asn1_number_of_elements.texi b/doc/texi/asn1_number_of_elements.texi
new file mode 100644 (file)
index 0000000..7ffc7a6
--- /dev/null
@@ -0,0 +1,14 @@
+@subheading asn1_number_of_elements
+@anchor{asn1_number_of_elements}
+@deftypefun {asn1_retCode} {asn1_number_of_elements} (ASN1_TYPE @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:} @end deftypefun
+
diff --git a/doc/texi/asn1_octet_der.texi b/doc/texi/asn1_octet_der.texi
new file mode 100644 (file)
index 0000000..660860d
--- /dev/null
@@ -0,0 +1,14 @@
+@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}: OCTET string.
+
+@var{str_len}: STR length (str[0]..str[str_len-1]).
+
+@var{der}: string returned.
+
+@var{der_len}: number of meaningful bytes of DER (der[0]..der[ans_len-1]).
+
+Creates the DER coding for an OCTET type (length included).
+@end deftypefun
+
diff --git a/doc/texi/asn1_parser2array.texi b/doc/texi/asn1_parser2array.texi
new file mode 100644 (file)
index 0000000..8c94acc
--- /dev/null
@@ -0,0 +1,23 @@
+@subheading asn1_parser2array
+@anchor{asn1_parser2array}
+@deftypefun {int} {asn1_parser2array} (const char * @var{inputFileName}, const char * @var{outputFileName}, const char * @var{vectorName}, char * @var{errorDescription})
+@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{errorDescription}: 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:} @end deftypefun
+
diff --git a/doc/texi/asn1_parser2tree.texi b/doc/texi/asn1_parser2tree.texi
new file mode 100644 (file)
index 0000000..934fbfa
--- /dev/null
@@ -0,0 +1,17 @@
+@subheading asn1_parser2tree
+@anchor{asn1_parser2tree}
+@deftypefun {asn1_retCode} {asn1_parser2tree} (const char * @var{file_name}, ASN1_TYPE * @var{definitions}, char * @var{errorDescription})
+@var{file_name}: specify the path and the name of file that contains
+ASN.1 declarations.
+
+@var{definitions}: return the pointer to the structure created from
+"file_name" ASN.1 declarations.
+
+@var{errorDescription}: 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_name} file.
+
+@strong{Returns:} @end deftypefun
+
diff --git a/doc/texi/asn1_perror.texi b/doc/texi/asn1_perror.texi
new file mode 100644 (file)
index 0000000..d8628ae
--- /dev/null
@@ -0,0 +1,14 @@
+@subheading asn1_perror
+@anchor{asn1_perror}
+@deftypefun {void} {asn1_perror} (asn1_retCode @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.
+
+This function replaces @code{libtasn1_perror()} in older libtasn1.
+
+@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 (file)
index 0000000..ca8f24a
--- /dev/null
@@ -0,0 +1,17 @@
+@subheading asn1_print_structure
+@anchor{asn1_print_structure}
+@deftypefun {void} {asn1_print_structure} (FILE * @var{out}, ASN1_TYPE @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_tag.texi b/doc/texi/asn1_read_tag.texi
new file mode 100644 (file)
index 0000000..dd0d82d
--- /dev/null
@@ -0,0 +1,19 @@
+@subheading asn1_read_tag
+@anchor{asn1_read_tag}
+@deftypefun {asn1_retCode} {asn1_read_tag} (ASN1_TYPE @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.
+
+@strong{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:} @end deftypefun
+
diff --git a/doc/texi/asn1_read_value.texi b/doc/texi/asn1_read_value.texi
new file mode 100644 (file)
index 0000000..66ddec9
--- /dev/null
@@ -0,0 +1,60 @@
+@subheading asn1_read_value
+@anchor{asn1_read_value}
+@deftypefun {asn1_retCode} {asn1_read_value} (ASN1_TYPE @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.
+
+@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 the function "read_value" 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.
+
+@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.
+
+@strong{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.
+
+@strong{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.
+
+@strong{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:} @end deftypefun
+
diff --git a/doc/texi/asn1_strerror.texi b/doc/texi/asn1_strerror.texi
new file mode 100644 (file)
index 0000000..1a29fb8
--- /dev/null
@@ -0,0 +1,17 @@
+@subheading asn1_strerror
+@anchor{asn1_strerror}
+@deftypefun {const char *} {asn1_strerror} (asn1_retCode @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.
+
+This function replaces @code{libtasn1_strerror()} in older libtasn1.
+
+@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 (file)
index 0000000..f0e090e
--- /dev/null
@@ -0,0 +1,107 @@
+@subheading asn1_write_value
+@anchor{asn1_write_value}
+@deftypefun {asn1_retCode} {asn1_write_value} (ASN1_TYPE @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);
+
+@strong{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.
+
+@strong{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
+
+@strong{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
+
+@strong{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.
+
+@strong{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);
+
+@strong{SET OF:} the same as SEQUENCE OF.  Using "pkix.asn":
+
+result=asn1_write_value(cert,
+"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1);
+
+@strong{Returns:} @end deftypefun
+
diff --git a/doc/texi/coding.c.texi b/doc/texi/coding.c.texi
new file mode 100644 (file)
index 0000000..6420220
--- /dev/null
@@ -0,0 +1,62 @@
+@subheading asn1_length_der
+@anchor{asn1_length_der}
+@deftypefun {void} {asn1_length_der} (unsigned long int @var{len}, unsigned char * @var{ans}, int * @var{ans_len})
+@var{len}: value to convert.
+
+@var{ans}: string returned.
+
+@var{ans_len}: number of meaningful bytes of ANS (ans[0]..ans[ans_len-1]).
+
+Creates the DER coding for the LEN parameter (only the length).
+The @code{ans} buffer is pre-allocated and must have room for the output.
+@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}: OCTET string.
+
+@var{str_len}: STR length (str[0]..str[str_len-1]).
+
+@var{der}: string returned.
+
+@var{der_len}: number of meaningful bytes of DER (der[0]..der[ans_len-1]).
+
+Creates the DER coding for an OCTET type (length included).
+@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 the DER coding for a BIT STRING type (length and pad
+included).
+@end deftypefun
+
+@subheading asn1_der_coding
+@anchor{asn1_der_coding}
+@deftypefun {asn1_retCode} {asn1_der_coding} (ASN1_TYPE @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.
+
+Creates the DER encoding for the NAME structure (inside *POINTER
+structure).
+
+@strong{Returns:} @end deftypefun
+
diff --git a/doc/texi/decoding.c.texi b/doc/texi/decoding.c.texi
new file mode 100644 (file)
index 0000000..9618071
--- /dev/null
@@ -0,0 +1,217 @@
+@subheading asn1_get_length_der
+@anchor{asn1_get_length_der}
+@deftypefun {signed 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.
+@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 {signed 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_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:} Return @code{ASN1_SUCCESS} on success, or an error.
+@end deftypefun
+
+@subheading asn1_der_decoding
+@anchor{asn1_der_decoding}
+@deftypefun {asn1_retCode} {asn1_der_decoding} (ASN1_TYPE * @var{element}, const void * @var{ider}, int @var{len}, char * @var{errorDescription})
+@var{element}: pointer to an ASN1 structure.
+
+@var{ider}: vector that contains the DER encoding.
+
+@var{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()}.  If an error occurs during the decoding
+procedure, the *@code{ELEMENT} is deleted and set equal to
+@code{ASN1_TYPE_EMPTY}.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND}
+if @code{ELEMENT} is @code{ASN1_TYPE_EMPTY}, 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 {asn1_retCode} {asn1_der_decoding_element} (ASN1_TYPE * @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{ASN1_TYPE_EMPTY}.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND}
+if ELEMENT is @code{ASN1_TYPE_EMPTY} 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 {asn1_retCode} {asn1_der_decoding_startEnd} (ASN1_TYPE @var{element}, const void * @var{ider}, int @var{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{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.
+
+@strong{Returns:} @code{ASN1_SUCCESS} if DER encoding OK, @code{ASN1_ELEMENT_NOT_FOUND}
+if ELEMENT is @code{ASN1_TYPE} 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 {asn1_retCode} {asn1_expand_any_defined_by} (ASN1_TYPE @var{definitions}, ASN1_TYPE * @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 {asn1_retCode} {asn1_expand_octet_string} (ASN1_TYPE @var{definitions}, ASN1_TYPE * @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/element.c.texi b/doc/texi/element.c.texi
new file mode 100644 (file)
index 0000000..7f5aa25
--- /dev/null
@@ -0,0 +1,186 @@
+@subheading asn1_write_value
+@anchor{asn1_write_value}
+@deftypefun {asn1_retCode} {asn1_write_value} (ASN1_TYPE @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);
+
+@strong{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.
+
+@strong{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
+
+@strong{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
+
+@strong{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.
+
+@strong{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);
+
+@strong{SET OF:} the same as SEQUENCE OF.  Using "pkix.asn":
+
+result=asn1_write_value(cert,
+"tbsCertificate.subject.rdnSequence.?LAST", "NEW", 1);
+
+@strong{Returns:} @end deftypefun
+
+@subheading asn1_read_value
+@anchor{asn1_read_value}
+@deftypefun {asn1_retCode} {asn1_read_value} (ASN1_TYPE @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.
+
+@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 the function "read_value" 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.
+
+@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.
+
+@strong{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.
+
+@strong{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.
+
+@strong{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:} @end deftypefun
+
+@subheading asn1_read_tag
+@anchor{asn1_read_tag}
+@deftypefun {asn1_retCode} {asn1_read_tag} (ASN1_TYPE @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.
+
+@strong{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:} @end deftypefun
+
diff --git a/doc/texi/errors.c.texi b/doc/texi/errors.c.texi
new file mode 100644 (file)
index 0000000..960674c
--- /dev/null
@@ -0,0 +1,58 @@
+@subheading asn1_perror
+@anchor{asn1_perror}
+@deftypefun {void} {asn1_perror} (asn1_retCode @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.
+
+This function replaces @code{libtasn1_perror()} in older libtasn1.
+
+@strong{Since:} 1.6
+@end deftypefun
+
+@subheading asn1_strerror
+@anchor{asn1_strerror}
+@deftypefun {const char *} {asn1_strerror} (asn1_retCode @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.
+
+This function replaces @code{libtasn1_strerror()} in older libtasn1.
+
+@strong{Returns:} Pointer to static zero-terminated string describing error
+code.
+
+@strong{Since:} 1.6
+@end deftypefun
+
+@subheading libtasn1_perror
+@anchor{libtasn1_perror}
+@deftypefun {void} {libtasn1_perror} (asn1_retCode @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{Deprecated:} Use @code{asn1_perror()} instead.
+@end deftypefun
+
+@subheading libtasn1_strerror
+@anchor{libtasn1_strerror}
+@deftypefun {const char *} {libtasn1_strerror} (asn1_retCode @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{Deprecated:} Use @code{asn1_strerror()} instead.
+@end deftypefun
+
diff --git a/doc/texi/gstr.c.texi b/doc/texi/gstr.c.texi
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/doc/texi/libtasn1_perror.texi b/doc/texi/libtasn1_perror.texi
new file mode 100644 (file)
index 0000000..4fa2086
--- /dev/null
@@ -0,0 +1,12 @@
+@subheading libtasn1_perror
+@anchor{libtasn1_perror}
+@deftypefun {void} {libtasn1_perror} (asn1_retCode @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{Deprecated:} Use @code{asn1_perror()} instead.
+@end deftypefun
+
diff --git a/doc/texi/libtasn1_strerror.texi b/doc/texi/libtasn1_strerror.texi
new file mode 100644 (file)
index 0000000..2bea4cb
--- /dev/null
@@ -0,0 +1,15 @@
+@subheading libtasn1_strerror
+@anchor{libtasn1_strerror}
+@deftypefun {const char *} {libtasn1_strerror} (asn1_retCode @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{Deprecated:} Use @code{asn1_strerror()} instead.
+@end deftypefun
+
diff --git a/doc/texi/parser_aux.c.texi b/doc/texi/parser_aux.c.texi
new file mode 100644 (file)
index 0000000..ce4c262
--- /dev/null
@@ -0,0 +1,15 @@
+@subheading asn1_find_node
+@anchor{asn1_find_node}
+@deftypefun {ASN1_TYPE} {asn1_find_node} (ASN1_TYPE @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 (file)
index 0000000..659194d
--- /dev/null
@@ -0,0 +1,115 @@
+@subheading asn1_array2tree
+@anchor{asn1_array2tree}
+@deftypefun {asn1_retCode} {asn1_array2tree} (const ASN1_ARRAY_TYPE * @var{array}, ASN1_TYPE * @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:} @end deftypefun
+
+@subheading asn1_delete_structure
+@anchor{asn1_delete_structure}
+@deftypefun {asn1_retCode} {asn1_delete_structure} (ASN1_TYPE * @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 ASN1_TYPE_EMPTY.
+
+@strong{Returns:} @end deftypefun
+
+@subheading asn1_delete_element
+@anchor{asn1_delete_element}
+@deftypefun {asn1_retCode} {asn1_delete_element} (ASN1_TYPE @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:} @end deftypefun
+
+@subheading asn1_create_element
+@anchor{asn1_create_element}
+@deftypefun {asn1_retCode} {asn1_create_element} (ASN1_TYPE @var{definitions}, const char * @var{source_name}, ASN1_TYPE * @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:} @end deftypefun
+
+@subheading asn1_print_structure
+@anchor{asn1_print_structure}
+@deftypefun {void} {asn1_print_structure} (FILE * @var{out}, ASN1_TYPE @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 {asn1_retCode} {asn1_number_of_elements} (ASN1_TYPE @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:} @end deftypefun
+
+@subheading asn1_find_structure_from_oid
+@anchor{asn1_find_structure_from_oid}
+@deftypefun {const char *} {asn1_find_structure_from_oid} (ASN1_TYPE @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 {asn1_retCode} {asn1_copy_node} (ASN1_TYPE @var{dst}, const char * @var{dst_name}, ASN1_TYPE @var{src}, const char * @var{src_name})
+@var{dst}: Destination ASN1_TYPE node.
+
+@var{dst_name}: Field name in destination node.
+
+@var{src}: Source ASN1_TYPE node.
+
+@var{src_name}: Field name in source node.
+
+Create a deep copy of a ASN1_TYPE variable.
+
+@strong{Return value:} Return @code{ASN1_SUCCESS} on success.
+@end deftypefun
+
diff --git a/doc/texi/version.c.texi b/doc/texi/version.c.texi
new file mode 100644 (file)
index 0000000..cc6b42b
--- /dev/null
@@ -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/texinfo.css b/doc/texinfo.css
new file mode 100644 (file)
index 0000000..69614b5
--- /dev/null
@@ -0,0 +1,44 @@
+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;
+}
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644 (file)
index 0000000..6009cd1
--- /dev/null
@@ -0,0 +1,4 @@
+@set UPDATED 20 April 2010
+@set UPDATED-MONTH April 2010
+@set EDITION 2.7
+@set VERSION 2.7
diff --git a/examples/CertificateExample.c b/examples/CertificateExample.c
new file mode 100644 (file)
index 0000000..4673f5f
--- /dev/null
@@ -0,0 +1,674 @@
+/*
+ * Copyright (C) 2000, 2001, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+/*****************************************************/
+/* File: CertificateExample.c                        */
+/* Description: An example on how to use the ASN1    */
+/*              parser with the Certificate.txt file */
+/*****************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "libtasn1.h"
+
+
+static char *
+my_ltostr (long v, char *str)
+{
+  long d, r;
+  char temp[20];
+  int count, k, start;
+
+  if (v < 0)
+    {
+      str[0] = '-';
+      start = 1;
+      v = -v;
+    }
+  else
+    start = 0;
+
+  count = 0;
+  do
+    {
+      d = v / 10;
+      r = v - d * 10;
+      temp[start + count] = '0' + (char) r;
+      count++;
+      v = d;
+    }
+  while (v);
+
+  for (k = 0; k < count; k++)
+    str[k + start] = temp[start + count - k - 1];
+  str[count + start] = 0;
+  return str;
+}
+
+/******************************************************/
+/* Function : get_name_type                           */
+/* Description: analyze a structure of type Name      */
+/* Parameters:                                        */
+/*   char *root: the structure identifier             */
+/*   char *answer: the string with elements like:     */
+/*                 "C=US O=gov"                       */
+/******************************************************/
+static void
+get_Name_type (ASN1_TYPE cert_def, ASN1_TYPE cert, const char *root,
+              char *answer)
+{
+  int k, k2, result, len;
+  char name[128], str[1024], str2[1024], name2[128], counter[5], name3[128];
+  ASN1_TYPE value = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  answer[0] = 0;
+  k = 1;
+  do
+    {
+      strcpy (name, root);
+      strcat (name, ".rdnSequence.?");
+      my_ltostr (k, counter);
+      strcat (name, counter);
+      len = sizeof (str) - 1;
+      result = asn1_read_value (cert, name, str, &len);
+      if (result == ASN1_ELEMENT_NOT_FOUND)
+       break;
+      k2 = 1;
+      do
+       {
+         strcpy (name2, name);
+         strcat (name2, ".?");
+         my_ltostr (k2, counter);
+         strcat (name2, counter);
+         len = sizeof (str) - 1;
+         result = asn1_read_value (cert, name2, str, &len);
+         if (result == ASN1_ELEMENT_NOT_FOUND)
+           break;
+         strcpy (name3, name2);
+         strcat (name3, ".type");
+         len = sizeof (str) - 1;
+         result = asn1_read_value (cert, name3, str, &len);
+         strcpy (name3, name2);
+         strcat (name3, ".value");
+         if (result == ASN1_SUCCESS)
+           {
+             len = sizeof (str2) - 1;
+             result =
+               asn1_read_value (cert_def,
+                                "PKIX1Implicit88.id-at-countryName", str2,
+                                &len);
+             if (!strcmp (str, str2))
+               {
+                 asn1_create_element (cert_def,
+                                      "PKIX1Implicit88.X520OrganizationName",
+                                      &value);
+                 len = sizeof (str) - 1;
+                 asn1_read_value (cert, name3, str, &len);
+                 asn1_der_decoding (&value, str, len, errorDescription);
+                 len = sizeof (str) - 1;
+                 asn1_read_value (value, "", str, &len);       /* CHOICE */
+                 strcpy (name3, str);
+                 len = sizeof (str) - 1;
+                 asn1_read_value (value, name3, str, &len);
+                 str[len] = 0;
+                 strcat (answer, " C=");
+                 strcat (answer, str);
+                 asn1_delete_structure (&value);
+               }
+             else
+               {
+                 len = sizeof (str2) - 1;
+                 result =
+                   asn1_read_value (cert_def,
+                                    "PKIX1Implicit88.id-at-organizationName",
+                                    str2, &len);
+                 if (!strcmp (str, str2))
+                   {
+                     asn1_create_element (cert_def,
+                                          "PKIX1Implicit88.X520OrganizationName",
+                                          &value);
+                     len = sizeof (str) - 1;
+                     asn1_read_value (cert, name3, str, &len);
+                     asn1_der_decoding (&value, str, len, errorDescription);
+                     len = sizeof (str) - 1;
+                     asn1_read_value (value, "", str, &len);   /* CHOICE */
+                     strcpy (name3, str);
+                     len = sizeof (str) - 1;
+                     asn1_read_value (value, name3, str, &len);
+                     str[len] = 0;
+                     strcat (answer, " O=");
+                     strcat (answer, str);
+                     asn1_delete_structure (&value);
+                   }
+                 else
+                   {
+                     len = sizeof (str2) - 1;
+                     result =
+                       asn1_read_value (cert_def,
+                                        "PKIX1Implicit88.id-at-organizationalUnitName",
+                                        str2, &len);
+                     if (!strcmp (str, str2))
+                       {
+                         asn1_create_element (cert_def,
+                                              "PKIX1Implicit88.X520OrganizationalUnitName",
+                                              &value);
+                         len = sizeof (str) - 1;
+                         asn1_read_value (cert, name3, str, &len);
+                         asn1_der_decoding (&value, str, len,
+                                            errorDescription);
+                         len = sizeof (str) - 1;
+                         asn1_read_value (value, "", str, &len);       /* CHOICE */
+                         strcpy (name3, str);
+                         len = sizeof (str) - 1;
+                         asn1_read_value (value, name3, str, &len);
+                         str[len] = 0;
+                         strcat (answer, " OU=");
+                         strcat (answer, str);
+                         asn1_delete_structure (&value);
+                       }
+                   }
+               }
+           }
+         k2++;
+       }
+      while (1);
+      k++;
+    }
+  while (1);
+}
+
+
+/******************************************************/
+/* Function : create_certificate                      */
+/* Description: creates a certificate named           */
+/*              "certificate1". Values are the same   */
+/*              as in rfc2459 Appendix D.1            */
+/* Parameters:                                        */
+/*   unsigned char *der: contains the der encoding    */
+/*   int *der_len: number of bytes of der string      */
+/******************************************************/
+static void
+create_certificate (ASN1_TYPE cert_def, unsigned char *der, int *der_len)
+{
+  int result, k, len;
+  unsigned char str[1024];
+  const unsigned char *str2;
+  ASN1_TYPE cert1 = ASN1_TYPE_EMPTY;
+  ASN1_TYPE value = ASN1_TYPE_EMPTY;
+  ASN1_TYPE param = ASN1_TYPE_EMPTY;
+  ASN1_TYPE constr = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  int max_len;
+
+  max_len = *der_len;
+
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.Certificate", &cert1);
+
+  /* Use the next 3 lines to visit the empty certificate */
+  /* printf("-----------------\n");
+     asn1_visit_tree(cert1,"");
+     printf("-----------------\n"); */
+
+  /* version: v3(2) */
+  result = asn1_write_value (cert1, "tbsCertificate.version", "v3", 0);
+
+  /* serialNumber: 17 */
+  result = asn1_write_value (cert1, "tbsCertificate.serialNumber", "17", 0);
+
+  /* signature: dsa-with-sha1 */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.signature.algorithm", str, 1);
+
+  result = asn1_write_value (cert1, "tbsCertificate.signature.parameters",
+                            NULL, 0);
+
+
+  /* issuer: Country="US" Organization="gov" OrganizationUnit="nist" */
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer", "rdnSequence", 12);
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW",
+                     1);
+  /* C */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str,
+                    &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value);
+  result = asn1_write_value (value, "", "US", 2);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW",
+                     1);
+  /* O */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str,
+                    &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName",
+                        &value);
+  result = asn1_write_value (value, "", "printableString", 1);
+  result = asn1_write_value (value, "printableString", "gov", 3);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW",
+                     1);
+
+  /* OU */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName",
+                    str, &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def,
+                        "PKIX1Implicit88.X520OrganizationalUnitName",
+                        &value);
+  result = asn1_write_value (value, "", "printableString", 1);
+  result = asn1_write_value (value, "printableString", "nist", 4);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  /* validity */
+  result =
+    asn1_write_value (cert1, "tbsCertificate.validity.notBefore", "utcTime",
+                     1);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.validity.notBefore.utcTime",
+                     "970630000000Z", 1);
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.validity.notAfter", "utcTime",
+                     1);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.validity.notAfter.utcTime",
+                     "971231000000Z", 1);
+
+
+
+  /* subject: Country="US" Organization="gov" OrganizationUnit="nist" */
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject", "rdnSequence", 1);
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 1);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST",
+                     "NEW", 1);
+  /* C */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str,
+                    &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value);
+  result = asn1_write_value (value, "", "US", 2);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 4);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST",
+                     "NEW", 4);
+  /* O */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str,
+                    &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName",
+                        &value);
+  result = asn1_write_value (value, "", "printableString", 1);
+  result = asn1_write_value (value, "printableString", "gov", 3);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 4);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST",
+                     "NEW", 4);
+  /* OU */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName",
+                    str, &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def,
+                        "PKIX1Implicit88.X520OrganizationalUnitName",
+                        &value);
+  result = asn1_write_value (value, "", "printableString", 1);
+  result = asn1_write_value (value, "printableString", "nist", 4);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  /* subjectPublicKeyInfo: dsa with parameters=Dss-Parms */
+  len = sizeof (str) - 1;
+  result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa", str, &len);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subjectPublicKeyInfo.algorithm.algorithm",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.Dss-Parms", &param);
+  str2 = "\xd4\x38";           /* only an example */
+  result = asn1_write_value (param, "p", str2, 128);
+  str2 = "\xd4\x38";           /* only an example */
+  result = asn1_write_value (param, "q", str2, 20);
+  str2 = "\xd4\x38";           /* only an example */
+  result = asn1_write_value (param, "g", str2, 128);
+  *der_len = max_len;
+  result = asn1_der_coding (param, "", der, der_len, errorDescription);
+  asn1_delete_structure (&param);
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subjectPublicKeyInfo.algorithm.parameters",
+                     der, *der_len);
+
+
+  /* subjectPublicKey */
+  str2 = "\x02\x81";           /* only an example */
+  result =
+    asn1_write_value (cert1,
+                     "tbsCertificate.subjectPublicKeyInfo.subjectPublicKey",
+                     str2, 1048);
+
+  result = asn1_write_value (cert1, "tbsCertificate.issuerUniqueID", NULL, 0); /* NO OPTION */
+  result = asn1_write_value (cert1, "tbsCertificate.subjectUniqueID", NULL, 0);        /* NO OPTION */
+
+  /* extensions */
+  result = asn1_write_value (cert1, "tbsCertificate.extensions", "NEW", 1);
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-basicConstraints", str,
+                    &len);
+  result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnID", str, 1); /*   basicConstraints */
+  result =
+    asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.critical",
+                     "TRUE", 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.BasicConstraints",
+                        &constr);
+  result = asn1_write_value (constr, "cA", "TRUE", 1);
+  result = asn1_write_value (constr, "pathLenConstraint", NULL, 0);
+  *der_len = max_len;
+  result = asn1_der_coding (constr, "", der, der_len, errorDescription);
+  result = asn1_delete_structure (&constr);
+  result =
+    asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnValue", der,
+                     *der_len);
+
+
+  result = asn1_write_value (cert1, "tbsCertificate.extensions", "NEW", 1);
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-subjectKeyIdentifier",
+                    str, &len);
+  result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnID", str, 1); /* subjectKeyIdentifier */
+  result =
+    asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.critical",
+                     "FALSE", 1);
+  str2 = "\x04\x14\xe7\x26\xc5";       /* only an example */
+  result =
+    asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnValue",
+                     str2, 22);
+
+
+  /* signatureAlgorithm: dsa-with-sha  */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len);
+  result = asn1_write_value (cert1, "signatureAlgorithm.algorithm", str, 1);
+  result = asn1_write_value (cert1, "signatureAlgorithm.parameters", NULL, 0); /* NO OPTION */
+
+
+  /* signature */
+  *der_len = max_len;
+  result =
+    asn1_der_coding (cert1, "tbsCertificate", der, der_len, errorDescription);
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("\n'tbsCertificate' encoding creation: ERROR\n");
+    }
+  /* add the lines for the signature on der[0]..der[der_len-1]: result in str2 */
+  result = asn1_write_value (cert1, "signature", str2, 368);   /* dsa-with-sha */
+
+
+  /* Use the next 3 lines to visit the certificate */
+  /* printf("-----------------\n");
+     asn1_visit_tree(cert1,"");
+     printf("-----------------\n"); */
+
+  *der_len = max_len;
+  result = asn1_der_coding (cert1, "", der, der_len, errorDescription);
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("\n'certificate' encoding creation: ERROR\n");
+      return;
+    }
+
+  /* Print the 'Certificate1' DER encoding */
+  printf ("-----------------\nCertificate Encoding:\nNumber of bytes=%i\n",
+         *der_len);
+  for (k = 0; k < *der_len; k++)
+    printf ("%02x ", der[k]);
+  printf ("\n-----------------\n");
+
+  /* Clear the "certificate1" structure */
+  asn1_delete_structure (&cert1);
+}
+
+
+
+/******************************************************/
+/* Function : get_certificate                         */
+/* Description: creates a certificate named           */
+/*              "certificate2" from a der encoding    */
+/*              string                                */
+/* Parameters:                                        */
+/*   unsigned char *der: the encoding string          */
+/*   int der_len: number of bytes of der string      */
+/******************************************************/
+static void
+get_certificate (ASN1_TYPE cert_def, unsigned char *der, int der_len)
+{
+  int result, len, start, end;
+  unsigned char str[1024], str2[1024];
+  ASN1_TYPE cert2 = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  asn1_create_element (cert_def, "PKIX1Implicit88.Certificate", &cert2);
+
+  result = asn1_der_decoding (&cert2, der, der_len, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("Problems with DER encoding\n");
+      return;
+    }
+
+
+  /* issuer */
+  get_Name_type (cert_def, cert2, "tbsCertificate.issuer", str);
+  printf ("certificate:\nissuer :%s\n", str);
+  /* subject */
+  get_Name_type (cert_def, cert2, "tbsCertificate.subject", str);
+  printf ("subject:%s\n", str);
+
+
+  /* Verify sign */
+  len = sizeof (str) - 1;
+  result = asn1_read_value (cert2, "signatureAlgorithm.algorithm", str, &len);
+
+  len = sizeof (str2) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str2,
+                    &len);
+  if (!strcmp (str, str2))
+    {                          /* dsa-with-sha */
+
+      result = asn1_der_decoding_startEnd (cert2, der, der_len,
+                                          "tbsCertificate", &start, &end);
+
+      /* add the lines to calculate the sha on der[start]..der[end] */
+
+      len = sizeof (str) - 1;
+      result = asn1_read_value (cert2, "signature", str, &len);
+
+      /* compare the previous value to signature ( with issuer public key) */
+    }
+
+  /* Use the next 3 lines to visit the certificate */
+  /*   printf("-----------------\n");
+     asn1_visit_tree(cert2,"");
+     printf("-----------------\n"); */
+
+
+  /* Clear the "certificate2" structure */
+  asn1_delete_structure (&cert2);
+}
+
+extern const ASN1_ARRAY_TYPE pkix_asn1_tab[];
+
+/********************************************************/
+/* Function : main                                      */
+/* Description: reads the certificate description.      */
+/*              Creates a certificate and calculate     */
+/*              the der encoding. After that creates    */
+/*              another certificate from der string     */
+/********************************************************/
+int
+main (int argc, char *argv[])
+{
+  int result, der_len;
+  unsigned char der[1024];
+  ASN1_TYPE PKIX1Implicit88 = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  if (1)
+    result =
+      asn1_array2tree (pkix_asn1_tab, &PKIX1Implicit88, errorDescription);
+  else
+    result =
+      asn1_parser2tree ("pkix.asn", &PKIX1Implicit88, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("%s", errorDescription);
+      exit (1);
+    }
+
+
+  /* Use the following 3 lines to visit the PKIX1Implicit structures */
+  /* printf("-----------------\n");
+     asn1_visit_tree(PKIX1Implicit88,"PKIX1Implicit88");
+     printf("-----------------\n"); */
+
+  der_len = 1024;
+  create_certificate (PKIX1Implicit88, der, &der_len);
+
+  get_certificate (PKIX1Implicit88, der, der_len);
+
+  /* Clear the "PKIX1Implicit88" structures */
+  asn1_delete_structure (&PKIX1Implicit88);
+
+  return 0;
+}
diff --git a/examples/CrlExample.c b/examples/CrlExample.c
new file mode 100644 (file)
index 0000000..f38f1a0
--- /dev/null
@@ -0,0 +1,540 @@
+/*
+ * Copyright (C) 2000, 2001, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+/*****************************************************/
+/* File: CrlExample.c                                */
+/* Description: An example on how to use the ASN1    */
+/*              parser with the Certificate.txt file */
+/*****************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "libtasn1.h"
+
+
+
+static char *
+my_ltostr (long v, char *str)
+{
+  long d, r;
+  char temp[20];
+  int count, k, start;
+
+  if (v < 0)
+    {
+      str[0] = '-';
+      start = 1;
+      v = -v;
+    }
+  else
+    start = 0;
+
+  count = 0;
+  do
+    {
+      d = v / 10;
+      r = v - d * 10;
+      temp[start + count] = '0' + (char) r;
+      count++;
+      v = d;
+    }
+  while (v);
+
+  for (k = 0; k < count; k++)
+    str[k + start] = temp[start + count - k - 1];
+  str[count + start] = 0;
+  return str;
+}
+
+
+/******************************************************/
+/* Function : get_name_type                           */
+/* Description: analyze a structure of type Name      */
+/* Parameters:                                        */
+/*   char *root: the structure identifier             */
+/*   char *answer: the string with elements like:     */
+/*                 "C=US O=gov"                       */
+/******************************************************/
+static void
+get_Name_type (ASN1_TYPE cert_def, ASN1_TYPE cert, const char *root,
+              char *answer)
+{
+  int k, k2, result, len;
+  char name[128], str[1024], str2[1024], name2[128], counter[5], name3[128];
+  ASN1_TYPE value = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  answer[0] = 0;
+  k = 1;
+  do
+    {
+      strcpy (name, root);
+      strcat (name, ".rdnSequence.?");
+      my_ltostr (k, counter);
+      strcat (name, counter);
+
+      len = sizeof (str) - 1;
+      result = asn1_read_value (cert, name, str, &len);
+      if (result == ASN1_ELEMENT_NOT_FOUND)
+       break;
+      k2 = 1;
+      do
+       {
+         strcpy (name2, name);
+         strcat (name2, ".?");
+         my_ltostr (k2, counter);
+         strcat (name2, counter);
+
+         len = sizeof (str) - 1;
+         result = asn1_read_value (cert, name2, str, &len);
+         if (result == ASN1_ELEMENT_NOT_FOUND)
+           break;
+         strcpy (name3, name2);
+         strcat (name3, ".type");
+
+         len = sizeof (str) - 1;
+         result = asn1_read_value (cert, name3, str, &len);
+         strcpy (name3, name2);
+         strcat (name3, ".value");
+         if (result == ASN1_SUCCESS)
+           {
+             len = sizeof (str2);
+             result =
+               asn1_read_value (cert_def,
+                                "PKIX1Implicit88.id-at-countryName", str2,
+                                &len);
+             if (!strcmp (str, str2))
+               {
+                 asn1_create_element (cert_def,
+                                      "PKIX1Implicit88.X520OrganizationName",
+                                      &value);
+                 len = sizeof (str) - 1;
+                 asn1_read_value (cert, name3, str, &len);
+                 result =
+                   asn1_der_decoding (&value, str, len, errorDescription);
+
+                 len = sizeof (str) - 1;
+                 asn1_read_value (value, "", str, &len);       /* CHOICE */
+
+                 strcpy (name3, str);
+
+                 len = sizeof (str) - 1;
+                 asn1_read_value (value, name3, str, &len);
+                 str[len] = 0;
+                 strcat (answer, " C=");
+                 strcat (answer, str);
+
+                 asn1_delete_structure (&value);
+               }
+             else
+               {
+                 len = sizeof (str2);
+                 result =
+                   asn1_read_value (cert_def,
+                                    "PKIX1Implicit88.id-at-organizationName",
+                                    str2, &len);
+                 if (!strcmp (str, str2))
+                   {
+                     asn1_create_element (cert_def,
+                                          "PKIX1Implicit88.X520OrganizationName",
+                                          &value);
+
+                     len = sizeof (str) - 1;
+                     asn1_read_value (cert, name3, str, &len);
+                     asn1_der_decoding (&value, str, len, errorDescription);
+                     len = sizeof (str) - 1;
+                     asn1_read_value (value, "", str, &len);   /* CHOICE */
+                     strcpy (name3, str);
+                     len = sizeof (str) - 1;
+                     asn1_read_value (value, name3, str, &len);
+                     str[len] = 0;
+                     strcat (answer, " O=");
+                     strcat (answer, str);
+                     asn1_delete_structure (&value);
+                   }
+                 else
+                   {
+                     len = sizeof (str2);
+                     result =
+                       asn1_read_value (cert_def,
+                                        "PKIX1Implicit88.id-at-organizationalUnitName",
+                                        str2, &len);
+                     if (!strcmp (str, str2))
+                       {
+                         asn1_create_element (cert_def,
+                                              "PKIX1Implicit88.X520OrganizationalUnitName",
+                                              &value);
+                         len = sizeof (str) - 1;
+                         asn1_read_value (cert, name3, str, &len);
+                         asn1_der_decoding (&value, str, len,
+                                            errorDescription);
+                         len = sizeof (str) - 1;
+                         asn1_read_value (value, "", str, &len);       /* CHOICE */
+                         strcpy (name3, str);
+                         len = sizeof (str) - 1;
+                         asn1_read_value (value, name3, str, &len);
+                         str[len] = 0;
+                         strcat (answer, " OU=");
+                         strcat (answer, str);
+                         asn1_delete_structure (&value);
+                       }
+                   }
+               }
+           }
+         k2++;
+       }
+      while (1);
+      k++;
+    }
+  while (1);
+}
+
+
+/******************************************************/
+/* Function : create_certificate                      */
+/* Description: creates a certificate named           */
+/*              "certificate1". Values are the same   */
+/*              as in rfc2459 Appendix D.1            */
+/* Parameters:                                        */
+/*   unsigned char *der: contains the der encoding    */
+/*   int *der_len: number of bytes of der string      */
+/******************************************************/
+static void
+create_CRL (ASN1_TYPE cert_def, unsigned char *der, int *der_len)
+{
+  int result, k, len;
+  unsigned char str[1024];
+  const unsigned char *str2;
+  ASN1_TYPE crl = ASN1_TYPE_EMPTY;
+  ASN1_TYPE value = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  int max_len;
+
+  max_len = *der_len;
+
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.CertificateList", &crl);
+
+  /* Use the next 3 lines to visit the empty certificate */
+  /*  printf("-----------------\n");
+     asn1_visit_tree(crl,"");
+     printf("-----------------\n"); */
+
+
+  /* version: v2(1) */
+  result = asn1_write_value (crl, "tbsCertList.version", "v2", 0);
+
+
+  /* signature: dsa-with-sha */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len);
+  result = asn1_write_value (crl, "tbsCertList.signature.algorithm", str, 1);
+  result =
+    asn1_write_value (crl, "tbsCertList.signature.parameters", NULL, 0);
+
+
+  /* issuer: Country="US" Organization="gov" OrganizationUnit="nist" */
+  result = asn1_write_value (crl, "tbsCertList.issuer", "rdnSequence", 1);
+
+  result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 1);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 1);
+  /* C */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str,
+                    &len);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value);
+  result = asn1_write_value (value, "", "US", 2);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 4);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 4);
+  /* O */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str,
+                    &len);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type",
+                     str, 8);
+  result =
+    asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName",
+                        &value);
+  result = asn1_write_value (value, "", "printableString", 1);
+  result = asn1_write_value (value, "printableString", "gov", 3);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 1);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 1);
+  /* OU */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName",
+                    str, &len);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type",
+                     str, 1);
+  result =
+    asn1_create_element (cert_def,
+                        "PKIX1Implicit88.X520OrganizationalUnitName",
+                        &value);
+  result = asn1_write_value (value, "", "printableString", 1);
+  result = asn1_write_value (value, "printableString", "nist", 4);
+  *der_len = max_len;
+  result = asn1_der_coding (value, "", der, der_len, errorDescription);
+  asn1_delete_structure (&value);
+  result =
+    asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value",
+                     der, *der_len);
+
+
+  /* validity */
+  result = asn1_write_value (crl, "tbsCertList.thisUpdate", "utcTime", 1);
+  result =
+    asn1_write_value (crl, "tbsCertList.thisUpdate.utcTime", "970801000000Z",
+                     1);
+
+  result = asn1_write_value (crl, "tbsCertList.nextUpdate", "utcTime", 1);
+  result =
+    asn1_write_value (crl, "tbsCertList.nextUpdate.utcTime", "970808000000Z",
+                     1);
+
+
+  /* revokedCertificates */
+  result =
+    asn1_write_value (crl, "tbsCertList.revokedCertificates", "NEW", 1);
+  str[0] = 18;
+  result =
+    asn1_write_value (crl,
+                     "tbsCertList.revokedCertificates.?LAST.userCertificate",
+                     str, 1);
+  result =
+    asn1_write_value (crl,
+                     "tbsCertList.revokedCertificates.?LAST.revocationDate",
+                     "utcTime", 1);
+  result =
+    asn1_write_value (crl,
+                     "tbsCertList.revokedCertificates.?LAST.revocationDate.utcTime",
+                     "970731000000Z", 1);
+
+  result =
+    asn1_write_value (crl,
+                     "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions",
+                     "NEW", 1);
+  len = sizeof (str) - 1;
+  result = asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-cRLReasons",
+                           str, &len);
+  result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.extnID", str, 1);    /* reasonCode */
+  result =
+    asn1_write_value (crl,
+                     "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.critical",
+                     "FALSE", 1);
+  str2 = "\x0a\x01\x01";
+  result =
+    asn1_write_value (crl,
+                     "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.extnValue",
+                     str2, 3);
+
+
+  /* crlExtensions */
+  result = asn1_write_value (crl, "tbsCertList.crlExtensions", NULL, 0);
+
+
+  /* signatureAlgorithm: dsa-with-sha  */
+  len = sizeof (str) - 1;
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len);
+  result = asn1_write_value (crl, "signatureAlgorithm.algorithm", str, 1);
+  result = asn1_write_value (crl, "signatureAlgorithm.parameters", NULL, 0);   /* NO OPTION */
+
+  /* signature */
+  *der_len = max_len;
+  result =
+    asn1_der_coding (crl, "tbsCertList", der, der_len, errorDescription);
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("\n'tbsCertList' encoding creation: ERROR\n");
+      return;
+    }
+
+  /* add the lines for the signature on der[0]..der[der_len-1]: result in str2 */
+  result = asn1_write_value (crl, "signature", str2, 46 * 8);
+
+
+  /* Use the next 3 lines to visit the certificate */
+  /* printf("-----------------\n");
+     asn1_visit_tree(crl,"");
+     printf("-----------------\n"); */
+
+  *der_len = max_len;
+  result = asn1_der_coding (crl, "", der, der_len, errorDescription);
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("\n'crl1' encoding creation: ERROR\n");
+      return;
+    }
+
+  /* Print the 'Certificate1' DER encoding */
+  printf ("-----------------\nCrl1 Encoding:\nNumber of bytes=%i\n",
+         *der_len);
+  for (k = 0; k < *der_len; k++)
+    printf ("%02x ", der[k]);
+  printf ("\n-----------------\n");
+
+  /* Clear the "certificate1" structure */
+  asn1_delete_structure (&crl);
+}
+
+
+
+/******************************************************/
+/* Function : get_certificate                         */
+/* Description: creates a certificate named           */
+/*              "certificate2" from a der encoding    */
+/*              string                                */
+/* Parameters:                                        */
+/*   unsigned char *der: the encoding string          */
+/*   int der_len: number of bytes of der string      */
+/******************************************************/
+static void
+get_CRL (ASN1_TYPE cert_def, unsigned char *der, int der_len)
+{
+  int result, len, start, end;
+  unsigned char str[1024], str2[1024];
+  ASN1_TYPE crl2 = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+
+  asn1_create_element (cert_def, "PKIX1Implicit88.CertificateList", &crl2);
+
+  result = asn1_der_decoding (&crl2, der, der_len, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("Problems with DER encoding\n");
+      return;
+    }
+
+
+  /* issuer */
+  get_Name_type (cert_def, crl2, "tbsCertList.issuer", str);
+  printf ("crl2:\nissuer: %s\n", str);
+
+
+  /* Verify sign */
+  len = sizeof (str) - 1;
+  result = asn1_read_value (crl2, "signatureAlgorithm.algorithm", str, &len);
+
+  result =
+    asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str2,
+                    &len);
+  if (!strcmp (str, str2))
+    {                          /* dsa-with-sha */
+
+      result = asn1_der_decoding_startEnd (crl2, der, der_len,
+                                          "tbsCertList", &start, &end);
+
+      /* add the lines to calculate the sha on der[start]..der[end] */
+
+      result = asn1_read_value (crl2, "signature", str, &len);
+
+      /* compare the previous value to signature ( with issuer public key) */
+    }
+
+  /* Use the next 3 lines to visit the certificate */
+  /* printf("-----------------\n");
+     asn1_visit_tree(crl2,"");
+     printf("-----------------\n"); */
+
+
+  /* Clear the "crl2" structure */
+  asn1_delete_structure (&crl2);
+}
+
+extern const ASN1_ARRAY_TYPE pkix_asn1_tab[];
+
+/********************************************************/
+/* Function : main                                      */
+/* Description: reads the certificate description.      */
+/*              Creates a certificate and calculate     */
+/*              the der encoding. After that creates    */
+/*              another certificate from der string     */
+/********************************************************/
+int
+main (int argc, char *argv[])
+{
+  int result, der_len;
+  unsigned char der[1024];
+  ASN1_TYPE PKIX1Implicit88 = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  if (1)
+    result =
+      asn1_array2tree (pkix_asn1_tab, &PKIX1Implicit88, errorDescription);
+  else
+    result =
+      asn1_parser2tree ("pkix.asn", &PKIX1Implicit88, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("%s\n", errorDescription);
+      exit (1);
+    }
+
+  /* Use the following 3 lines to visit the PKIX1Implicit structures */
+  /* printf("-----------------\n");
+     asn1_visit_tree(cert_def,"PKIX1Implicit88");
+     printf("-----------------\n"); */
+
+  der_len = 1024;
+  create_CRL (PKIX1Implicit88, der, &der_len);
+
+
+  get_CRL (PKIX1Implicit88, der, der_len);
+
+  /* Clear the "PKIX1Implicit88" structures */
+  asn1_delete_structure (&PKIX1Implicit88);
+
+  return 0;
+}
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644 (file)
index 0000000..8e4f475
--- /dev/null
@@ -0,0 +1,37 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_builddir)/gl
+
+EXTRA_DIST = asn1Coding_test.asn asn1Coding_test.asg
+
+LDADD = ../lib/libtasn1.la ../gl/libgnu.la
+
+noinst_PROGRAMS = CertificateExample CrlExample
+
+CertificateExample_SOURCES = CertificateExample.c pkix_asn1_tab.c pkix.asn
+
+CrlExample_SOURCES = CrlExample.c pkix_asn1_tab.c pkix.asn
+
+BUILT_SOURCES = pkix_asn1_tab.c
+MAINTAINERCLEANFILES = pkix_asn1_tab.c
+
+pkix_asn1_tab.c: $(srcdir)/pkix.asn
+       ../src/asn1Parser -o $@ $(srcdir)/pkix.asn
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644 (file)
index 0000000..85a7b5b
--- /dev/null
@@ -0,0 +1,877 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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@
+noinst_PROGRAMS = CertificateExample$(EXEEXT) CrlExample$(EXEEXT)
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_CertificateExample_OBJECTS = CertificateExample.$(OBJEXT) \
+       pkix_asn1_tab.$(OBJEXT)
+CertificateExample_OBJECTS = $(am_CertificateExample_OBJECTS)
+CertificateExample_LDADD = $(LDADD)
+CertificateExample_DEPENDENCIES = ../lib/libtasn1.la ../gl/libgnu.la
+am_CrlExample_OBJECTS = CrlExample.$(OBJEXT) pkix_asn1_tab.$(OBJEXT)
+CrlExample_OBJECTS = $(am_CrlExample_OBJECTS)
+CrlExample_LDADD = $(LDADD)
+CrlExample_DEPENDENCIES = ../lib/libtasn1.la ../gl/libgnu.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(CertificateExample_SOURCES) $(CrlExample_SOURCES)
+DIST_SOURCES = $(CertificateExample_SOURCES) $(CrlExample_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_builddir)/gl
+EXTRA_DIST = asn1Coding_test.asn asn1Coding_test.asg
+LDADD = ../lib/libtasn1.la ../gl/libgnu.la
+CertificateExample_SOURCES = CertificateExample.c pkix_asn1_tab.c pkix.asn
+CrlExample_SOURCES = CrlExample.c pkix_asn1_tab.c pkix.asn
+BUILT_SOURCES = pkix_asn1_tab.c
+MAINTAINERCLEANFILES = pkix_asn1_tab.c
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 examples/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu examples/Makefile
+.PRECIOUS: 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):
+
+clean-noinstPROGRAMS:
+       @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+CertificateExample$(EXEEXT): $(CertificateExample_OBJECTS) $(CertificateExample_DEPENDENCIES) 
+       @rm -f CertificateExample$(EXEEXT)
+       $(LINK) $(CertificateExample_OBJECTS) $(CertificateExample_LDADD) $(LIBS)
+CrlExample$(EXEEXT): $(CrlExample_OBJECTS) $(CrlExample_DEPENDENCIES) 
+       @rm -f CrlExample$(EXEEXT)
+       $(LINK) $(CrlExample_OBJECTS) $(CrlExample_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CertificateExample.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrlExample.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkix_asn1_tab.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+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
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) 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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+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 -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+       clean-libtool clean-noinstPROGRAMS ctags distclean \
+       distclean-compile 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-pdf install-pdf-am install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am
+
+
+pkix_asn1_tab.c: $(srcdir)/pkix.asn
+       ../src/asn1Parser -o $@ $(srcdir)/pkix.asn
+
+# 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/examples/asn1Coding_test.asg b/examples/asn1Coding_test.asg
new file mode 100644 (file)
index 0000000..b0f9495
--- /dev/null
@@ -0,0 +1,6 @@
+
+
+TEST    Test.Sequence1
+
+int1    10
+int2    -10
diff --git a/examples/asn1Coding_test.asn b/examples/asn1Coding_test.asn
new file mode 100644 (file)
index 0000000..5fa00b6
--- /dev/null
@@ -0,0 +1,30 @@
+Test { }
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+Sequence1 ::= SEQUENCE {
+  int1   INTEGER,
+  int2   INTEGER
+}
+
+END
+
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-- 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/>.
diff --git a/examples/pkix.asn b/examples/pkix.asn
new file mode 100644 (file)
index 0000000..d13ce20
--- /dev/null
@@ -0,0 +1,955 @@
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+-- 2009, 2010 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/>.
+
+PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1)
+  security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)}
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+-- ISO arc for standard certificate and CRL extensions
+
+id-ce OBJECT IDENTIFIER  ::=  {joint-iso-ccitt(2) ds(5) 29}
+
+
+-- authority key identifier OID and syntax
+
+id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
+
+AuthorityKeyIdentifier ::= SEQUENCE {
+      keyIdentifier             [0] KeyIdentifier            OPTIONAL,
+      authorityCertIssuer       [1] GeneralNames             OPTIONAL,
+      authorityCertSerialNumber [2] CertificateSerialNumber  OPTIONAL }
+    -- authorityCertIssuer and authorityCertSerialNumber shall both
+    -- be present or both be absgent
+
+KeyIdentifier ::= OCTET STRING
+
+-- subject key identifier OID and syntax
+
+id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }
+
+SubjectKeyIdentifier ::= KeyIdentifier
+
+-- key usage extension OID and syntax
+
+id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
+
+KeyUsage ::= BIT STRING {
+     digitalSignature        (0),
+     nonRepudiation          (1),
+     keyEncipherment         (2),
+     dataEncipherment        (3),
+     keyAgreement            (4),
+     keyCertSign             (5),
+     cRLSign                 (6),
+     encipherOnly            (7),
+     decipherOnly            (8) }
+
+-- private key usage period extension OID and syntax
+
+id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::=  { id-ce 16 }
+
+PrivateKeyUsagePeriod ::= SEQUENCE {
+     notBefore       [0]     GeneralizedTime OPTIONAL,
+     notAfter        [1]     GeneralizedTime OPTIONAL }
+     -- either notBefore or notAfter shall be present
+
+-- certificate policies extension OID and syntax
+
+id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }
+
+CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
+
+PolicyInformation ::= SEQUENCE {
+     policyIdentifier   CertPolicyId,
+     policyQualifiers   SEQUENCE SIZE (1..MAX) OF
+             PolicyQualifierInfo OPTIONAL }
+
+CertPolicyId ::= OBJECT IDENTIFIER
+
+PolicyQualifierInfo ::= SEQUENCE {
+       policyQualifierId  PolicyQualifierId,
+       qualifier        ANY DEFINED BY policyQualifierId }
+
+-- Implementations that recognize additional policy qualifiers shall
+-- augment the following definition for PolicyQualifierId
+
+PolicyQualifierId ::=
+    OBJECT IDENTIFIER  -- ( id-qt-cps | id-qt-unotice )
+
+-- CPS pointer qualifier
+
+CPSuri ::= IA5String
+
+-- user notice qualifier
+
+UserNotice ::= SEQUENCE {
+     noticeRef        NoticeReference OPTIONAL,
+     explicitText     DisplayText OPTIONAL}
+
+NoticeReference ::= SEQUENCE {
+     organization     DisplayText,
+     noticeNumbers    SEQUENCE OF INTEGER }
+
+DisplayText ::= CHOICE {
+     visibleString    VisibleString  (SIZE (1..200)),
+     bmpString        BMPString      (SIZE (1..200)),
+     utf8String       UTF8String     (SIZE (1..200)) }
+
+-- policy mapping extension OID and syntax
+
+id-ce-policyMappings OBJECT IDENTIFIER ::=  { id-ce 33 }
+
+PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
+     issuerDomainPolicy      CertPolicyId,
+     subjectDomainPolicy     CertPolicyId }
+
+-- subject alternative name extension OID and syntax
+
+id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }
+
+SubjectAltName ::= GeneralNames
+
+GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
+
+GeneralName ::= CHOICE {
+     otherName                       [0]     AnotherName,
+     rfc822Name                      [1]     IA5String,
+     dNSName                         [2]     IA5String,
+     x400Address                     [3]     ORAddress,
+     directoryName                   [4]     Name,
+     ediPartyName                    [5]     EDIPartyName,
+     uniformResourceIdentifier       [6]     IA5String,
+     iPAddress                       [7]     OCTET STRING,
+     registeredID                    [8]     OBJECT IDENTIFIER }
+
+-- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as
+-- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax
+
+AnotherName ::= SEQUENCE {
+     type-id    OBJECT IDENTIFIER,
+     value      [0] EXPLICIT ANY DEFINED BY type-id }
+
+EDIPartyName ::= SEQUENCE {
+     nameAssigner            [0]     DirectoryString OPTIONAL,
+     partyName               [1]     DirectoryString }
+
+-- issuer alternative name extension OID and syntax
+
+id-ce-issuerAltName OBJECT IDENTIFIER ::=  { id-ce 18 }
+
+IssuerAltName ::= GeneralNames
+
+id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::=  { id-ce 9 }
+
+SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+
+-- basic constraints extension OID and syntax
+
+id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }
+
+BasicConstraints ::= SEQUENCE {
+     cA                      BOOLEAN DEFAULT FALSE,
+     pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
+
+-- name constraints extension OID and syntax
+
+id-ce-nameConstraints OBJECT IDENTIFIER ::=  { id-ce 30 }
+
+NameConstraints ::= SEQUENCE {
+     permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
+     excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
+
+GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
+
+GeneralSubtree ::= SEQUENCE {
+     base                    GeneralName,
+     minimum         [0]     BaseDistance DEFAULT 0,
+     maximum         [1]     BaseDistance OPTIONAL }
+
+BaseDistance ::= INTEGER (0..MAX)
+
+-- policy constraints extension OID and syntax
+
+id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }
+
+PolicyConstraints ::= SEQUENCE {
+     requireExplicitPolicy           [0] SkipCerts OPTIONAL,
+     inhibitPolicyMapping            [1] SkipCerts OPTIONAL }
+
+SkipCerts ::= INTEGER (0..MAX)
+
+-- CRL distribution points extension OID and syntax
+
+id-ce-cRLDistributionPoints     OBJECT IDENTIFIER  ::=  {id-ce 31}
+
+CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
+
+DistributionPoint ::= SEQUENCE {
+     distributionPoint       [0]     DistributionPointName OPTIONAL,
+     reasons                 [1]     ReasonFlags OPTIONAL,
+     cRLIssuer               [2]     GeneralNames OPTIONAL }
+
+DistributionPointName ::= CHOICE {
+     fullName                [0]     GeneralNames,
+     nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }
+
+
+
+ReasonFlags ::= BIT STRING {
+     unused                  (0),
+     keyCompromise           (1),
+     cACompromise            (2),
+     affiliationChanged      (3),
+     superseded              (4),
+     cessationOfOperation    (5),
+     certificateHold         (6) }
+
+-- extended key usage extension OID and syntax
+
+id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
+
+ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
+
+KeyPurposeId ::= OBJECT IDENTIFIER
+
+-- extended key purpose OIDs
+id-kp-serverAuth      OBJECT IDENTIFIER ::= { id-kp 1 }
+id-kp-clientAuth      OBJECT IDENTIFIER ::= { id-kp 2 }
+id-kp-codeSigning     OBJECT IDENTIFIER ::= { id-kp 3 }
+id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
+id-kp-ipsecEndSystem  OBJECT IDENTIFIER ::= { id-kp 5 }
+id-kp-ipsecTunnel     OBJECT IDENTIFIER ::= { id-kp 6 }
+id-kp-ipsecUser       OBJECT IDENTIFIER ::= { id-kp 7 }
+id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }
+
+-- authority info access
+
+id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
+
+AuthorityInfoAccessSyntax  ::=
+        SEQUENCE SIZE (1..MAX) OF AccessDescription
+
+AccessDescription  ::=  SEQUENCE {
+        accessMethod          OBJECT IDENTIFIER,
+        accessLocation        GeneralName  }
+
+-- CRL number extension OID and syntax
+
+id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
+
+CRLNumber ::= INTEGER (0..MAX)
+
+-- issuing distribution point extension OID and syntax
+
+id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
+
+IssuingDistributionPoint ::= SEQUENCE {
+     distributionPoint       [0] DistributionPointName OPTIONAL,
+     onlyContainsUserCerts   [1] BOOLEAN DEFAULT FALSE,
+     onlyContainsCACerts     [2] BOOLEAN DEFAULT FALSE,
+     onlySomeReasons         [3] ReasonFlags OPTIONAL,
+     indirectCRL             [4] BOOLEAN DEFAULT FALSE }
+
+
+id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
+
+-- deltaCRLIndicator ::= BaseCRLNumber
+
+BaseCRLNumber ::= CRLNumber
+
+-- CRL reasons extension OID and syntax
+
+id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
+
+CRLReason ::= ENUMERATED {
+     unspecified             (0),
+     keyCompromise           (1),
+     cACompromise            (2),
+     affiliationChanged      (3),
+     superseded              (4),
+     cessationOfOperation    (5),
+     certificateHold         (6),
+     removeFromCRL           (8) }
+
+-- certificate issuer CRL entry extension OID and syntax
+
+id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
+
+CertificateIssuer ::= GeneralNames
+
+-- hold instruction extension OID and syntax
+
+id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }
+
+HoldInstructionCode ::= OBJECT IDENTIFIER
+
+-- ANSI x9 holdinstructions
+
+-- ANSI x9 arc holdinstruction arc
+holdInstruction OBJECT IDENTIFIER ::=
+          {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2}
+
+-- ANSI X9 holdinstructions referenced by this standard
+id-holdinstruction-none OBJECT IDENTIFIER  ::=
+                {holdInstruction 1} -- deprecated
+id-holdinstruction-callissuer OBJECT IDENTIFIER ::=
+                {holdInstruction 2}
+id-holdinstruction-reject OBJECT IDENTIFIER ::=
+                {holdInstruction 3}
+
+-- invalidity date CRL entry extension OID and syntax
+
+id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
+
+InvalidityDate ::=  GeneralizedTime
+
+
+-- --------------------------------------
+--  EXPLICIT
+-- --------------------------------------
+
+-- UNIVERSAL Types defined in '93 and '98 ASN.1
+-- but required by this specification
+
+VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING
+
+NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING
+
+IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING
+
+TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING
+
+PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING
+
+UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
+        -- UniversalString is defined in ASN.1:1993
+
+BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
+      -- BMPString is the subtype of UniversalString and models
+       -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1
+
+UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
+        -- The content of this type conforms to RFC 2279.
+
+
+-- PKIX specific OIDs
+
+id-pkix  OBJECT IDENTIFIER  ::=
+         { iso(1) identified-organization(3) dod(6) internet(1)
+                    security(5) mechanisms(5) pkix(7) }
+
+-- PKIX arcs
+
+id-pe OBJECT IDENTIFIER  ::=  { id-pkix 1 }
+        -- arc for private certificate extensions
+id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
+        -- arc for policy qualifier types
+id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
+        -- arc for extended key purpose OIDS
+id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+        -- arc for access descriptors
+
+-- policyQualifierIds for Internet policy qualifiers
+
+id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
+        -- OID for CPS qualifier
+id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
+        -- OID for user notice qualifier
+
+-- access descriptor definitions
+
+id-ad-ocsp      OBJECT IDENTIFIER ::= { id-ad 1 }
+id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
+
+-- attribute data types --
+
+Attribute       ::=     SEQUENCE {
+        type            AttributeType,
+        values  SET OF AttributeValue
+                -- at least one value is required --
+}
+
+AttributeType           ::=   OBJECT IDENTIFIER
+
+AttributeValue          ::=   ANY
+
+AttributeTypeAndValue           ::=     SEQUENCE {
+        type    AttributeType,
+        value   AttributeValue }
+
+-- suggested naming attributes: Definition of the following
+--  information object set may be augmented to meet local
+--  requirements.  Note that deleting members of the set may
+--  prevent interoperability with conforming implementations.
+--  presented in pairs: the AttributeType followed by the
+--  type definition for the corresponding AttributeValue
+
+-- Arc for standard naming attributes
+id-at           OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4}
+
+-- Attributes of type NameDirectoryString
+id-at-name              AttributeType   ::=     {id-at 41}
+id-at-surname           AttributeType   ::=     {id-at 4}
+id-at-givenName         AttributeType   ::=     {id-at 42}
+id-at-initials          AttributeType   ::=     {id-at 43}
+id-at-generationQualifier       AttributeType   ::=     {id-at 44}
+
+X520name        ::= CHOICE {
+      teletexString         TeletexString (SIZE (1..ub-name)),
+      printableString       PrintableString (SIZE (1..ub-name)),
+      universalString       UniversalString (SIZE (1..ub-name)),
+      utf8String            UTF8String (SIZE (1..ub-name)),
+      bmpString             BMPString (SIZE(1..ub-name))   }
+
+--
+
+id-at-commonName        AttributeType   ::=     {id-at 3}
+
+X520CommonName  ::=      CHOICE {
+      teletexString         TeletexString (SIZE (1..ub-common-name)),
+      printableString       PrintableString (SIZE (1..ub-common-name)),
+      universalString       UniversalString (SIZE (1..ub-common-name)),
+      utf8String            UTF8String (SIZE (1..ub-common-name)),
+      bmpString             BMPString (SIZE(1..ub-common-name))   }
+
+--
+
+id-at-localityName      AttributeType   ::=     {id-at 7}
+
+X520LocalityName ::= CHOICE {
+      teletexString       TeletexString (SIZE (1..ub-locality-name)),
+      printableString     PrintableString (SIZE (1..ub-locality-name)),
+      universalString     UniversalString (SIZE (1..ub-locality-name)),
+      utf8String          UTF8String (SIZE (1..ub-locality-name)),
+      bmpString           BMPString (SIZE(1..ub-locality-name))   }
+
+--
+
+id-at-stateOrProvinceName       AttributeType   ::=     {id-at 8}
+
+X520StateOrProvinceName         ::= CHOICE {
+      teletexString       TeletexString (SIZE (1..ub-state-name)),
+      printableString     PrintableString (SIZE (1..ub-state-name)),
+      universalString     UniversalString (SIZE (1..ub-state-name)),
+      utf8String          UTF8String (SIZE (1..ub-state-name)),
+      bmpString           BMPString (SIZE(1..ub-state-name))   }
+
+--
+
+id-at-organizationName          AttributeType   ::=     {id-at 10}
+
+X520OrganizationName ::= CHOICE {
+  teletexString     TeletexString (SIZE (1..ub-organization-name)),
+  printableString   PrintableString (SIZE (1..ub-organization-name)),
+  universalString   UniversalString (SIZE (1..ub-organization-name)),
+  utf8String        UTF8String (SIZE (1..ub-organization-name)),
+  bmpString         BMPString (SIZE(1..ub-organization-name))   }
+
+--
+
+id-at-organizationalUnitName    AttributeType   ::=     {id-at 11}
+
+X520OrganizationalUnitName ::= CHOICE {
+ teletexString    TeletexString (SIZE (1..ub-organizational-unit-name)),
+ printableString        PrintableString
+                      (SIZE (1..ub-organizational-unit-name)),
+ universalString        UniversalString
+                      (SIZE (1..ub-organizational-unit-name)),
+ utf8String       UTF8String (SIZE (1..ub-organizational-unit-name)),
+ bmpString        BMPString (SIZE(1..ub-organizational-unit-name))   }
+
+--
+
+id-at-title     AttributeType   ::=     {id-at 12}
+
+X520Title ::=   CHOICE {
+      teletexString         TeletexString (SIZE (1..ub-title)),
+      printableString       PrintableString (SIZE (1..ub-title)),
+      universalString       UniversalString (SIZE (1..ub-title)),
+      utf8String            UTF8String (SIZE (1..ub-title)),
+      bmpString             BMPString (SIZE(1..ub-title))   }
+
+--
+
+id-at-dnQualifier       AttributeType   ::=     {id-at 46}
+X520dnQualifier ::=     PrintableString
+
+id-at-countryName       AttributeType   ::=     {id-at 6}
+X520countryName ::=     PrintableString (SIZE (2)) -- IS 3166 codes
+
+ -- Legacy attributes
+
+pkcs-9 OBJECT IDENTIFIER ::=
+       { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 }
+
+emailAddress AttributeType      ::= { pkcs-9 1 }
+
+Pkcs9email ::= IA5String (SIZE (1..ub-emailaddress-length))
+
+-- naming data types --
+
+Name            ::=   CHOICE { -- only one possibility for now --
+                                 rdnSequence  RDNSequence }
+
+RDNSequence     ::=   SEQUENCE OF RelativeDistinguishedName
+
+DistinguishedName       ::=   RDNSequence
+
+RelativeDistinguishedName  ::=
+                    SET SIZE (1 .. MAX) OF AttributeTypeAndValue
+
+-- Directory string type --
+
+DirectoryString ::= CHOICE {
+      teletexString             TeletexString (SIZE (1..MAX)),
+      printableString           PrintableString (SIZE (1..MAX)),
+      universalString           UniversalString (SIZE (1..MAX)),
+      utf8String              UTF8String (SIZE (1..MAX)),
+      bmpString               BMPString (SIZE(1..MAX))   }
+
+
+-- --------------------------------------------------------
+-- certificate and CRL specific structures begin here
+-- --------------------------------------------------------
+
+Certificate  ::=  SEQUENCE  {
+     tbsCertificate       TBSCertificate,
+     signatureAlgorithm   AlgorithmIdentifier,
+     signature            BIT STRING  }
+
+TBSCertificate  ::=  SEQUENCE  {
+     version         [0]  EXPLICIT Version DEFAULT v1,
+     serialNumber         CertificateSerialNumber,
+     signature            AlgorithmIdentifier,
+     issuer               Name,
+     validity             Validity,
+     subject              Name,
+     subjectPublicKeyInfo SubjectPublicKeyInfo,
+     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
+                          -- If present, version shall be v2 or v3
+     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
+                          -- If present, version shall be v2 or v3
+     extensions      [3]  EXPLICIT Extensions OPTIONAL
+                          -- If present, version shall be v3 --
+}
+
+Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+
+CertificateSerialNumber  ::=  INTEGER
+
+Validity ::= SEQUENCE {
+     notBefore      Time,
+     notAfter       Time }
+
+Time ::= CHOICE {
+     utcTime        UTCTime,
+     generalTime    GeneralizedTime }
+
+UniqueIdentifier  ::=  BIT STRING
+
+SubjectPublicKeyInfo  ::=  SEQUENCE  {
+     algorithm            AlgorithmIdentifier,
+     subjectPublicKey     BIT STRING  }
+
+Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+
+Extension  ::=  SEQUENCE  {
+     extnID      OBJECT IDENTIFIER,
+     critical    BOOLEAN DEFAULT FALSE,
+     extnValue   OCTET STRING  }
+
+
+-- ------------------------------------------
+-- CRL structures
+-- ------------------------------------------
+
+CertificateList  ::=  SEQUENCE  {
+     tbsCertList          TBSCertList,
+     signatureAlgorithm   AlgorithmIdentifier,
+     signature            BIT STRING  }
+
+TBSCertList  ::=  SEQUENCE  {
+     version                 Version OPTIONAL,
+                                  -- if present, shall be v2
+     signature               AlgorithmIdentifier,
+     issuer                  Name,
+     thisUpdate              Time,
+     nextUpdate              Time OPTIONAL,
+     revokedCertificates     SEQUENCE OF SEQUENCE  {
+          userCertificate         CertificateSerialNumber,
+          revocationDate          Time,
+          crlEntryExtensions      Extensions OPTIONAL
+                                         -- if present, shall be v2
+                               }  OPTIONAL,
+     crlExtensions           [0] EXPLICIT Extensions OPTIONAL
+                                         -- if present, shall be v2 --
+}
+
+-- Version, Time, CertificateSerialNumber, and Extensions were
+-- defined earlier for use in the certificate structure
+
+AlgorithmIdentifier  ::=  SEQUENCE  {
+     algorithm               OBJECT IDENTIFIER,
+     parameters              ANY DEFINED BY algorithm OPTIONAL  }
+                                -- contains a value of the type
+                                -- registered for use with the
+                                -- algorithm object identifier value
+
+-- Algorithm OIDs and parameter structures
+
+pkcs-1 OBJECT IDENTIFIER ::= {
+     iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 }
+
+rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1 }
+
+md2WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 2 }
+
+md5WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 4 }
+
+sha1WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 5 }
+
+id-dsa-with-sha1 OBJECT IDENTIFIER ::=  {
+     iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }
+
+Dss-Sig-Value  ::=  SEQUENCE  {
+     r       INTEGER,
+     s       INTEGER  }
+
+dhpublicnumber OBJECT IDENTIFIER ::= {
+     iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 }
+
+DomainParameters ::= SEQUENCE {
+     p       INTEGER, -- odd prime, p=jq +1
+     g       INTEGER, -- generator, g
+     q       INTEGER, -- factor of p-1
+     j       INTEGER OPTIONAL, -- subgroup factor, j>= 2
+     validationParms  ValidationParms OPTIONAL }
+
+ValidationParms ::= SEQUENCE {
+     seed             BIT STRING,
+     pgenCounter      INTEGER }
+
+id-dsa OBJECT IDENTIFIER ::= {
+     iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }
+
+Dss-Parms  ::=  SEQUENCE  {
+     p             INTEGER,
+     q             INTEGER,
+     g             INTEGER  }
+
+-- x400 address syntax starts here
+--      OR Names
+
+ORAddress ::= SEQUENCE {
+   built-in-standard-attributes BuiltInStandardAttributes,
+   built-in-domain-defined-attributes
+                        BuiltInDomainDefinedAttributes OPTIONAL,
+   -- see also teletex-domain-defined-attributes
+   extension-attributes ExtensionAttributes OPTIONAL }
+--      The OR-address is semantically absent from the OR-name if the
+--      built-in-standard-attribute sequence is empty and the
+--      built-in-domain-defined-attributes and extension-attributes are
+--      both omitted.
+
+--      Built-in Standard Attributes
+
+BuiltInStandardAttributes ::= SEQUENCE {
+   country-name CountryName OPTIONAL,
+   administration-domain-name AdministrationDomainName OPTIONAL,
+   network-address      [0] EXPLICIT NetworkAddress OPTIONAL,
+   -- see also extended-network-address
+   terminal-identifier  [1] EXPLICIT TerminalIdentifier OPTIONAL,
+   private-domain-name  [2] EXPLICIT PrivateDomainName OPTIONAL,
+   organization-name    [3] EXPLICIT OrganizationName OPTIONAL,
+   -- see also teletex-organization-name
+   numeric-user-identifier      [4] EXPLICIT NumericUserIdentifier OPTIONAL,
+   personal-name        [5] EXPLICIT PersonalName OPTIONAL,
+   -- see also teletex-personal-name
+   organizational-unit-names    [6] EXPLICIT OrganizationalUnitNames OPTIONAL
+   -- see also teletex-organizational-unit-names --
+}
+
+CountryName ::= [APPLICATION 1] CHOICE {
+   x121-dcc-code NumericString
+                (SIZE (ub-country-name-numeric-length)),
+   iso-3166-alpha2-code PrintableString
+                (SIZE (ub-country-name-alpha-length)) }
+
+AdministrationDomainName ::= [APPLICATION 2] EXPLICIT CHOICE {
+   numeric NumericString (SIZE (0..ub-domain-name-length)),
+   printable PrintableString (SIZE (0..ub-domain-name-length)) }
+
+NetworkAddress ::= X121Address  -- see also extended-network-address
+
+X121Address ::= NumericString (SIZE (1..ub-x121-address-length))
+
+TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))
+
+PrivateDomainName ::= CHOICE {
+   numeric NumericString (SIZE (1..ub-domain-name-length)),
+   printable PrintableString (SIZE (1..ub-domain-name-length)) }
+
+OrganizationName ::= PrintableString
+                            (SIZE (1..ub-organization-name-length))
+-- see also teletex-organization-name
+
+NumericUserIdentifier ::= NumericString
+                            (SIZE (1..ub-numeric-user-id-length))
+
+PersonalName ::= SET {
+   surname [0] PrintableString (SIZE (1..ub-surname-length)),
+   given-name [1] PrintableString
+                        (SIZE (1..ub-given-name-length)) OPTIONAL,
+   initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL,
+   generation-qualifier [3] PrintableString
+                (SIZE (1..ub-generation-qualifier-length)) OPTIONAL }
+-- see also teletex-personal-name
+
+OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
+                                        OF OrganizationalUnitName
+-- see also teletex-organizational-unit-names
+
+OrganizationalUnitName ::= PrintableString (SIZE
+                        (1..ub-organizational-unit-name-length))
+
+--      Built-in Domain-defined Attributes
+
+BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
+                                (1..ub-domain-defined-attributes) OF
+                                BuiltInDomainDefinedAttribute
+
+BuiltInDomainDefinedAttribute ::= SEQUENCE {
+   type PrintableString (SIZE
+                        (1..ub-domain-defined-attribute-type-length)),
+   value PrintableString (SIZE
+                        (1..ub-domain-defined-attribute-value-length))}
+
+--      Extension Attributes
+
+ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
+                        ExtensionAttribute
+
+ExtensionAttribute ::=  SEQUENCE {
+   extension-attribute-type [0] EXPLICIT INTEGER (0..ub-extension-attributes),
+   extension-attribute-value [1] EXPLICIT
+                        ANY DEFINED BY extension-attribute-type }
+
+-- Extension types and attribute values
+--
+
+common-name INTEGER ::= 1
+
+CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+
+teletex-common-name INTEGER ::= 2
+
+TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))
+
+teletex-organization-name INTEGER ::= 3
+
+TeletexOrganizationName ::=
+                TeletexString (SIZE (1..ub-organization-name-length))
+
+teletex-personal-name INTEGER ::= 4
+
+TeletexPersonalName ::= SET {
+   surname [0] EXPLICIT TeletexString (SIZE (1..ub-surname-length)),
+   given-name [1] EXPLICIT TeletexString
+                (SIZE (1..ub-given-name-length)) OPTIONAL,
+   initials [2] EXPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL,
+   generation-qualifier [3] EXPLICIT TeletexString (SIZE
+                (1..ub-generation-qualifier-length)) OPTIONAL }
+
+teletex-organizational-unit-names INTEGER ::= 5
+
+TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
+        (1..ub-organizational-units) OF TeletexOrganizationalUnitName
+
+TeletexOrganizationalUnitName ::= TeletexString
+                        (SIZE (1..ub-organizational-unit-name-length))
+
+pds-name INTEGER ::= 7
+
+PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))
+
+physical-delivery-country-name INTEGER ::= 8
+
+PhysicalDeliveryCountryName ::= CHOICE {
+   x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
+   iso-3166-alpha2-code PrintableString
+                        (SIZE (ub-country-name-alpha-length)) }
+
+postal-code INTEGER ::= 9
+
+PostalCode ::= CHOICE {
+   numeric-code NumericString (SIZE (1..ub-postal-code-length)),
+   printable-code PrintableString (SIZE (1..ub-postal-code-length)) }
+
+physical-delivery-office-name INTEGER ::= 10
+
+PhysicalDeliveryOfficeName ::= PDSParameter
+
+physical-delivery-office-number INTEGER ::= 11
+
+PhysicalDeliveryOfficeNumber ::= PDSParameter
+
+extension-OR-address-components INTEGER ::= 12
+
+ExtensionORAddressComponents ::= PDSParameter
+
+physical-delivery-personal-name INTEGER ::= 13
+
+PhysicalDeliveryPersonalName ::= PDSParameter
+
+physical-delivery-organization-name INTEGER ::= 14
+
+PhysicalDeliveryOrganizationName ::= PDSParameter
+
+extension-physical-delivery-address-components INTEGER ::= 15
+
+ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter
+
+unformatted-postal-address INTEGER ::= 16
+
+UnformattedPostalAddress ::= SET {
+   printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF
+           PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
+   teletex-string TeletexString
+         (SIZE (1..ub-unformatted-address-length)) OPTIONAL }
+
+street-address INTEGER ::= 17
+
+StreetAddress ::= PDSParameter
+
+post-office-box-address INTEGER ::= 18
+
+PostOfficeBoxAddress ::= PDSParameter
+
+poste-restante-address INTEGER ::= 19
+
+PosteRestanteAddress ::= PDSParameter
+
+unique-postal-name INTEGER ::= 20
+
+UniquePostalName ::= PDSParameter
+
+local-postal-attributes INTEGER ::= 21
+
+LocalPostalAttributes ::= PDSParameter
+
+PDSParameter ::= SET {
+   printable-string PrintableString
+                (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
+   teletex-string TeletexString
+                (SIZE(1..ub-pds-parameter-length)) OPTIONAL }
+
+extended-network-address INTEGER ::= 22
+
+ExtendedNetworkAddress ::= CHOICE {
+   e163-4-address SEQUENCE {
+        number [0] EXPLICIT NumericString (SIZE (1..ub-e163-4-number-length)),
+        sub-address [1] EXPLICIT NumericString
+                (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL },
+   psap-address [0] EXPLICIT PresentationAddress }
+
+PresentationAddress ::= SEQUENCE {
+        pSelector       [0] EXPLICIT OCTET STRING OPTIONAL,
+        sSelector       [1] EXPLICIT OCTET STRING OPTIONAL,
+        tSelector       [2] EXPLICIT OCTET STRING OPTIONAL,
+        nAddresses      [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }
+
+terminal-type  INTEGER ::= 23
+
+TerminalType ::= INTEGER {
+   telex (3),
+   teletex (4),
+   g3-facsimile (5),
+   g4-facsimile (6),
+   ia5-terminal (7),
+   videotex (8) } (0..ub-integer-options)
+
+--      Extension Domain-defined Attributes
+
+teletex-domain-defined-attributes INTEGER ::= 6
+
+TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
+   (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute
+
+TeletexDomainDefinedAttribute ::= SEQUENCE {
+        type TeletexString
+               (SIZE (1..ub-domain-defined-attribute-type-length)),
+        value TeletexString
+               (SIZE (1..ub-domain-defined-attribute-value-length)) }
+
+--  specifications of Upper Bounds shall be regarded as mandatory
+--  from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
+--  Upper Bounds
+
+--      Upper Bounds
+ub-name INTEGER ::=     32768
+ub-common-name  INTEGER ::=     64
+ub-locality-name        INTEGER ::=     128
+ub-state-name   INTEGER ::=     128
+ub-organization-name    INTEGER ::=     64
+ub-organizational-unit-name     INTEGER ::=     64
+ub-title        INTEGER ::=     64
+ub-match        INTEGER ::=     128
+
+ub-emailaddress-length INTEGER ::= 128
+
+ub-common-name-length INTEGER ::= 64
+ub-country-name-alpha-length INTEGER ::= 2
+ub-country-name-numeric-length INTEGER ::= 3
+ub-domain-defined-attributes INTEGER ::= 4
+ub-domain-defined-attribute-type-length INTEGER ::= 8
+ub-domain-defined-attribute-value-length INTEGER ::= 128
+ub-domain-name-length INTEGER ::= 16
+ub-extension-attributes INTEGER ::= 256
+ub-e163-4-number-length INTEGER ::= 15
+ub-e163-4-sub-address-length INTEGER ::= 40
+ub-generation-qualifier-length INTEGER ::= 3
+ub-given-name-length INTEGER ::= 16
+ub-initials-length INTEGER ::= 5
+ub-integer-options INTEGER ::= 256
+ub-numeric-user-id-length INTEGER ::= 32
+ub-organization-name-length INTEGER ::= 64
+ub-organizational-unit-name-length INTEGER ::= 32
+ub-organizational-units INTEGER ::= 4
+ub-pds-name-length INTEGER ::= 16
+ub-pds-parameter-length INTEGER ::= 30
+ub-pds-physical-address-lines INTEGER ::= 6
+ub-postal-code-length INTEGER ::= 16
+ub-surname-length INTEGER ::= 40
+ub-terminal-id-length INTEGER ::= 24
+ub-unformatted-address-length INTEGER ::= 180
+ub-x121-address-length INTEGER ::= 16
+
+-- Note - upper bounds on string types, such as TeletexString, are
+-- measured in characters.  Excepting PrintableString or IA5String, a
+-- significantly greater number of octets will be required to hold
+-- such a value.  As a minimum, 16 octets, or twice the specified upper
+-- bound, whichever is the larger, should be allowed for TeletexString.
+-- For UTF8String or UniversalString at least four times the upper
+-- bound should be allowed.
+
+
+
+END
diff --git a/examples/pkix_asn1_tab.c b/examples/pkix_asn1_tab.c
new file mode 100644 (file)
index 0000000..f824eea
--- /dev/null
@@ -0,0 +1,877 @@
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <libtasn1.h>
+
+const ASN1_ARRAY_TYPE pkix_asn1_tab[] = {
+  { "PKIX1Implicit88", 536875024, NULL },
+  { NULL, 1610612748, NULL },
+  { "iso", 1073741825, "1"},
+  { "identified-organization", 1073741825, "3"},
+  { "dod", 1073741825, "6"},
+  { "internet", 1073741825, "1"},
+  { "security", 1073741825, "5"},
+  { "mechanisms", 1073741825, "5"},
+  { "pkix", 1073741825, "7"},
+  { "id-mod", 1073741825, "0"},
+  { "id-pkix1-implicit-88", 1, "2"},
+  { "id-ce", 1879048204, NULL },
+  { "joint-iso-ccitt", 1073741825, "2"},
+  { "ds", 1073741825, "5"},
+  { NULL, 1, "29"},
+  { "id-ce-authorityKeyIdentifier", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "35"},
+  { "AuthorityKeyIdentifier", 1610612741, NULL },
+  { "keyIdentifier", 1610637314, "KeyIdentifier"},
+  { NULL, 4104, "0"},
+  { "authorityCertIssuer", 1610637314, "GeneralNames"},
+  { NULL, 4104, "1"},
+  { "authorityCertSerialNumber", 536895490, "CertificateSerialNumber"},
+  { NULL, 4104, "2"},
+  { "KeyIdentifier", 1073741831, NULL },
+  { "id-ce-subjectKeyIdentifier", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "14"},
+  { "SubjectKeyIdentifier", 1073741826, "KeyIdentifier"},
+  { "id-ce-keyUsage", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "15"},
+  { "KeyUsage", 1610874886, NULL },
+  { "digitalSignature", 1073741825, "0"},
+  { "nonRepudiation", 1073741825, "1"},
+  { "keyEncipherment", 1073741825, "2"},
+  { "dataEncipherment", 1073741825, "3"},
+  { "keyAgreement", 1073741825, "4"},
+  { "keyCertSign", 1073741825, "5"},
+  { "cRLSign", 1073741825, "6"},
+  { "encipherOnly", 1073741825, "7"},
+  { "decipherOnly", 1, "8"},
+  { "id-ce-privateKeyUsagePeriod", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "16"},
+  { "PrivateKeyUsagePeriod", 1610612741, NULL },
+  { "notBefore", 1619025937, NULL },
+  { NULL, 4104, "0"},
+  { "notAfter", 545284113, NULL },
+  { NULL, 4104, "1"},
+  { "id-ce-certificatePolicies", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "32"},
+  { "CertificatePolicies", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "PolicyInformation"},
+  { "PolicyInformation", 1610612741, NULL },
+  { "policyIdentifier", 1073741826, "CertPolicyId"},
+  { "policyQualifiers", 538984459, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "PolicyQualifierInfo"},
+  { "CertPolicyId", 1073741836, NULL },
+  { "PolicyQualifierInfo", 1610612741, NULL },
+  { "policyQualifierId", 1073741826, "PolicyQualifierId"},
+  { "qualifier", 541065229, NULL },
+  { "policyQualifierId", 1, NULL },
+  { "PolicyQualifierId", 1073741836, NULL },
+  { "CPSuri", 1073741826, "IA5String"},
+  { "UserNotice", 1610612741, NULL },
+  { "noticeRef", 1073758210, "NoticeReference"},
+  { "explicitText", 16386, "DisplayText"},
+  { "NoticeReference", 1610612741, NULL },
+  { "organization", 1073741826, "DisplayText"},
+  { "noticeNumbers", 536870923, NULL },
+  { NULL, 3, NULL },
+  { "DisplayText", 1610612754, NULL },
+  { "visibleString", 1612709890, "VisibleString"},
+  { "200", 524298, "1"},
+  { "bmpString", 1612709890, "BMPString"},
+  { "200", 524298, "1"},
+  { "utf8String", 538968066, "UTF8String"},
+  { "200", 524298, "1"},
+  { "id-ce-policyMappings", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "33"},
+  { "PolicyMappings", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 536870917, NULL },
+  { "issuerDomainPolicy", 1073741826, "CertPolicyId"},
+  { "subjectDomainPolicy", 2, "CertPolicyId"},
+  { "id-ce-subjectAltName", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "17"},
+  { "SubjectAltName", 1073741826, "GeneralNames"},
+  { "GeneralNames", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "GeneralName"},
+  { "GeneralName", 1610612754, NULL },
+  { "otherName", 1610620930, "AnotherName"},
+  { NULL, 4104, "0"},
+  { "rfc822Name", 1610620930, "IA5String"},
+  { NULL, 4104, "1"},
+  { "dNSName", 1610620930, "IA5String"},
+  { NULL, 4104, "2"},
+  { "x400Address", 1610620930, "ORAddress"},
+  { NULL, 4104, "3"},
+  { "directoryName", 1610620930, "Name"},
+  { NULL, 4104, "4"},
+  { "ediPartyName", 1610620930, "EDIPartyName"},
+  { NULL, 4104, "5"},
+  { "uniformResourceIdentifier", 1610620930, "IA5String"},
+  { NULL, 4104, "6"},
+  { "iPAddress", 1610620935, NULL },
+  { NULL, 4104, "7"},
+  { "registeredID", 536879116, NULL },
+  { NULL, 4104, "8"},
+  { "AnotherName", 1610612741, NULL },
+  { "type-id", 1073741836, NULL },
+  { "value", 541073421, NULL },
+  { NULL, 1073743880, "0"},
+  { "type-id", 1, NULL },
+  { "EDIPartyName", 1610612741, NULL },
+  { "nameAssigner", 1610637314, "DirectoryString"},
+  { NULL, 4104, "0"},
+  { "partyName", 536879106, "DirectoryString"},
+  { NULL, 4104, "1"},
+  { "id-ce-issuerAltName", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "18"},
+  { "IssuerAltName", 1073741826, "GeneralNames"},
+  { "id-ce-subjectDirectoryAttributes", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "9"},
+  { "SubjectDirectoryAttributes", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "Attribute"},
+  { "id-ce-basicConstraints", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "19"},
+  { "BasicConstraints", 1610612741, NULL },
+  { "cA", 1610645508, NULL },
+  { NULL, 131081, NULL },
+  { "pathLenConstraint", 537411587, NULL },
+  { "0", 10, "MAX"},
+  { "id-ce-nameConstraints", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "30"},
+  { "NameConstraints", 1610612741, NULL },
+  { "permittedSubtrees", 1610637314, "GeneralSubtrees"},
+  { NULL, 4104, "0"},
+  { "excludedSubtrees", 536895490, "GeneralSubtrees"},
+  { NULL, 4104, "1"},
+  { "GeneralSubtrees", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "GeneralSubtree"},
+  { "GeneralSubtree", 1610612741, NULL },
+  { "base", 1073741826, "GeneralName"},
+  { "minimum", 1610653698, "BaseDistance"},
+  { NULL, 1073741833, "0"},
+  { NULL, 4104, "0"},
+  { "maximum", 536895490, "BaseDistance"},
+  { NULL, 4104, "1"},
+  { "BaseDistance", 1611137027, NULL },
+  { "0", 10, "MAX"},
+  { "id-ce-policyConstraints", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "36"},
+  { "PolicyConstraints", 1610612741, NULL },
+  { "requireExplicitPolicy", 1610637314, "SkipCerts"},
+  { NULL, 4104, "0"},
+  { "inhibitPolicyMapping", 536895490, "SkipCerts"},
+  { NULL, 4104, "1"},
+  { "SkipCerts", 1611137027, NULL },
+  { "0", 10, "MAX"},
+  { "id-ce-cRLDistributionPoints", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "31"},
+  { "CRLDistPointsSyntax", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "DistributionPoint"},
+  { "DistributionPoint", 1610612741, NULL },
+  { "distributionPoint", 1610637314, "DistributionPointName"},
+  { NULL, 4104, "0"},
+  { "reasons", 1610637314, "ReasonFlags"},
+  { NULL, 4104, "1"},
+  { "cRLIssuer", 536895490, "GeneralNames"},
+  { NULL, 4104, "2"},
+  { "DistributionPointName", 1610612754, NULL },
+  { "fullName", 1610620930, "GeneralNames"},
+  { NULL, 4104, "0"},
+  { "nameRelativeToCRLIssuer", 536879106, "RelativeDistinguishedName"},
+  { NULL, 4104, "1"},
+  { "ReasonFlags", 1610874886, NULL },
+  { "unused", 1073741825, "0"},
+  { "keyCompromise", 1073741825, "1"},
+  { "cACompromise", 1073741825, "2"},
+  { "affiliationChanged", 1073741825, "3"},
+  { "superseded", 1073741825, "4"},
+  { "cessationOfOperation", 1073741825, "5"},
+  { "certificateHold", 1, "6"},
+  { "id-ce-extKeyUsage", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "37"},
+  { "ExtKeyUsageSyntax", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "KeyPurposeId"},
+  { "KeyPurposeId", 1073741836, NULL },
+  { "id-kp-serverAuth", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "1"},
+  { "id-kp-clientAuth", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "2"},
+  { "id-kp-codeSigning", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "3"},
+  { "id-kp-emailProtection", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "4"},
+  { "id-kp-ipsecEndSystem", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "5"},
+  { "id-kp-ipsecTunnel", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "6"},
+  { "id-kp-ipsecUser", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "7"},
+  { "id-kp-timeStamping", 1879048204, NULL },
+  { NULL, 1073741825, "id-kp"},
+  { NULL, 1, "8"},
+  { "id-pe-authorityInfoAccess", 1879048204, NULL },
+  { NULL, 1073741825, "id-pe"},
+  { NULL, 1, "1"},
+  { "AuthorityInfoAccessSyntax", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "AccessDescription"},
+  { "AccessDescription", 1610612741, NULL },
+  { "accessMethod", 1073741836, NULL },
+  { "accessLocation", 2, "GeneralName"},
+  { "id-ce-cRLNumber", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "20"},
+  { "CRLNumber", 1611137027, NULL },
+  { "0", 10, "MAX"},
+  { "id-ce-issuingDistributionPoint", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "28"},
+  { "IssuingDistributionPoint", 1610612741, NULL },
+  { "distributionPoint", 1610637314, "DistributionPointName"},
+  { NULL, 4104, "0"},
+  { "onlyContainsUserCerts", 1610653700, NULL },
+  { NULL, 1073872905, NULL },
+  { NULL, 4104, "1"},
+  { "onlyContainsCACerts", 1610653700, NULL },
+  { NULL, 1073872905, NULL },
+  { NULL, 4104, "2"},
+  { "onlySomeReasons", 1610637314, "ReasonFlags"},
+  { NULL, 4104, "3"},
+  { "indirectCRL", 536911876, NULL },
+  { NULL, 1073872905, NULL },
+  { NULL, 4104, "4"},
+  { "id-ce-deltaCRLIndicator", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "27"},
+  { "BaseCRLNumber", 1073741826, "CRLNumber"},
+  { "id-ce-cRLReasons", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "21"},
+  { "CRLReason", 1610874901, NULL },
+  { "unspecified", 1073741825, "0"},
+  { "keyCompromise", 1073741825, "1"},
+  { "cACompromise", 1073741825, "2"},
+  { "affiliationChanged", 1073741825, "3"},
+  { "superseded", 1073741825, "4"},
+  { "cessationOfOperation", 1073741825, "5"},
+  { "certificateHold", 1073741825, "6"},
+  { "removeFromCRL", 1, "8"},
+  { "id-ce-certificateIssuer", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "29"},
+  { "CertificateIssuer", 1073741826, "GeneralNames"},
+  { "id-ce-holdInstructionCode", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "23"},
+  { "HoldInstructionCode", 1073741836, NULL },
+  { "holdInstruction", 1879048204, NULL },
+  { "joint-iso-itu-t", 1073741825, "2"},
+  { "member-body", 1073741825, "2"},
+  { "us", 1073741825, "840"},
+  { "x9cm", 1073741825, "10040"},
+  { NULL, 1, "2"},
+  { "id-holdinstruction-none", 1879048204, NULL },
+  { NULL, 1073741825, "holdInstruction"},
+  { NULL, 1, "1"},
+  { "id-holdinstruction-callissuer", 1879048204, NULL },
+  { NULL, 1073741825, "holdInstruction"},
+  { NULL, 1, "2"},
+  { "id-holdinstruction-reject", 1879048204, NULL },
+  { NULL, 1073741825, "holdInstruction"},
+  { NULL, 1, "3"},
+  { "id-ce-invalidityDate", 1879048204, NULL },
+  { NULL, 1073741825, "id-ce"},
+  { NULL, 1, "24"},
+  { "InvalidityDate", 1082130449, NULL },
+  { "VisibleString", 1610620935, NULL },
+  { NULL, 4360, "26"},
+  { "NumericString", 1610620935, NULL },
+  { NULL, 4360, "18"},
+  { "IA5String", 1610620935, NULL },
+  { NULL, 4360, "22"},
+  { "TeletexString", 1610620935, NULL },
+  { NULL, 4360, "20"},
+  { "PrintableString", 1610620935, NULL },
+  { NULL, 4360, "19"},
+  { "UniversalString", 1610620935, NULL },
+  { NULL, 4360, "28"},
+  { "BMPString", 1610620935, NULL },
+  { NULL, 4360, "30"},
+  { "UTF8String", 1610620935, NULL },
+  { NULL, 4360, "12"},
+  { "id-pkix", 1879048204, NULL },
+  { "iso", 1073741825, "1"},
+  { "identified-organization", 1073741825, "3"},
+  { "dod", 1073741825, "6"},
+  { "internet", 1073741825, "1"},
+  { "security", 1073741825, "5"},
+  { "mechanisms", 1073741825, "5"},
+  { "pkix", 1, "7"},
+  { "id-pe", 1879048204, NULL },
+  { NULL, 1073741825, "id-pkix"},
+  { NULL, 1, "1"},
+  { "id-qt", 1879048204, NULL },
+  { NULL, 1073741825, "id-pkix"},
+  { NULL, 1, "2"},
+  { "id-kp", 1879048204, NULL },
+  { NULL, 1073741825, "id-pkix"},
+  { NULL, 1, "3"},
+  { "id-ad", 1879048204, NULL },
+  { NULL, 1073741825, "id-pkix"},
+  { NULL, 1, "48"},
+  { "id-qt-cps", 1879048204, NULL },
+  { NULL, 1073741825, "id-qt"},
+  { NULL, 1, "1"},
+  { "id-qt-unotice", 1879048204, NULL },
+  { NULL, 1073741825, "id-qt"},
+  { NULL, 1, "2"},
+  { "id-ad-ocsp", 1879048204, NULL },
+  { NULL, 1073741825, "id-ad"},
+  { NULL, 1, "1"},
+  { "id-ad-caIssuers", 1879048204, NULL },
+  { NULL, 1073741825, "id-ad"},
+  { NULL, 1, "2"},
+  { "Attribute", 1610612741, NULL },
+  { "type", 1073741826, "AttributeType"},
+  { "values", 536870927, NULL },
+  { NULL, 2, "AttributeValue"},
+  { "AttributeType", 1073741836, NULL },
+  { "AttributeValue", 1073741837, NULL },
+  { "AttributeTypeAndValue", 1610612741, NULL },
+  { "type", 1073741826, "AttributeType"},
+  { "value", 2, "AttributeValue"},
+  { "id-at", 1879048204, NULL },
+  { "joint-iso-ccitt", 1073741825, "2"},
+  { "ds", 1073741825, "5"},
+  { NULL, 1, "4"},
+  { "id-at-name", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "41"},
+  { "id-at-surname", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "4"},
+  { "id-at-givenName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "42"},
+  { "id-at-initials", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "43"},
+  { "id-at-generationQualifier", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "44"},
+  { "X520name", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-name", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-name", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-name", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-name", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-name", 524298, "1"},
+  { "id-at-commonName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "3"},
+  { "X520CommonName", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-common-name", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-common-name", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-common-name", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-common-name", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-common-name", 524298, "1"},
+  { "id-at-localityName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "7"},
+  { "X520LocalityName", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-locality-name", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-locality-name", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-locality-name", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-locality-name", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-locality-name", 524298, "1"},
+  { "id-at-stateOrProvinceName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "8"},
+  { "X520StateOrProvinceName", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-state-name", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-state-name", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-state-name", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-state-name", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-state-name", 524298, "1"},
+  { "id-at-organizationName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "10"},
+  { "X520OrganizationName", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-organization-name", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-organization-name", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-organization-name", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-organization-name", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-organization-name", 524298, "1"},
+  { "id-at-organizationalUnitName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "11"},
+  { "X520OrganizationalUnitName", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-organizational-unit-name", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-organizational-unit-name", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-organizational-unit-name", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-organizational-unit-name", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-organizational-unit-name", 524298, "1"},
+  { "id-at-title", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "12"},
+  { "X520Title", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "ub-title", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "ub-title", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "ub-title", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "ub-title", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "ub-title", 524298, "1"},
+  { "id-at-dnQualifier", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "46"},
+  { "X520dnQualifier", 1073741826, "PrintableString"},
+  { "id-at-countryName", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "id-at"},
+  { NULL, 1, "6"},
+  { "X520countryName", 1612709890, "PrintableString"},
+  { NULL, 1048586, "2"},
+  { "pkcs-9", 1879048204, NULL },
+  { "iso", 1073741825, "1"},
+  { "member-body", 1073741825, "2"},
+  { "us", 1073741825, "840"},
+  { "rsadsi", 1073741825, "113549"},
+  { "pkcs", 1073741825, "1"},
+  { NULL, 1, "9"},
+  { "emailAddress", 1880096780, "AttributeType"},
+  { NULL, 1073741825, "pkcs-9"},
+  { NULL, 1, "1"},
+  { "Pkcs9email", 1612709890, "IA5String"},
+  { "ub-emailaddress-length", 524298, "1"},
+  { "Name", 1610612754, NULL },
+  { "rdnSequence", 2, "RDNSequence"},
+  { "RDNSequence", 1610612747, NULL },
+  { NULL, 2, "RelativeDistinguishedName"},
+  { "DistinguishedName", 1073741826, "RDNSequence"},
+  { "RelativeDistinguishedName", 1612709903, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "AttributeTypeAndValue"},
+  { "DirectoryString", 1610612754, NULL },
+  { "teletexString", 1612709890, "TeletexString"},
+  { "MAX", 524298, "1"},
+  { "printableString", 1612709890, "PrintableString"},
+  { "MAX", 524298, "1"},
+  { "universalString", 1612709890, "UniversalString"},
+  { "MAX", 524298, "1"},
+  { "utf8String", 1612709890, "UTF8String"},
+  { "MAX", 524298, "1"},
+  { "bmpString", 538968066, "BMPString"},
+  { "MAX", 524298, "1"},
+  { "Certificate", 1610612741, NULL },
+  { "tbsCertificate", 1073741826, "TBSCertificate"},
+  { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
+  { "signature", 6, NULL },
+  { "TBSCertificate", 1610612741, NULL },
+  { "version", 1610653698, "Version"},
+  { NULL, 1073741833, "v1"},
+  { NULL, 2056, "0"},
+  { "serialNumber", 1073741826, "CertificateSerialNumber"},
+  { "signature", 1073741826, "AlgorithmIdentifier"},
+  { "issuer", 1073741826, "Name"},
+  { "validity", 1073741826, "Validity"},
+  { "subject", 1073741826, "Name"},
+  { "subjectPublicKeyInfo", 1073741826, "SubjectPublicKeyInfo"},
+  { "issuerUniqueID", 1610637314, "UniqueIdentifier"},
+  { NULL, 4104, "1"},
+  { "subjectUniqueID", 1610637314, "UniqueIdentifier"},
+  { NULL, 4104, "2"},
+  { "extensions", 536895490, "Extensions"},
+  { NULL, 2056, "3"},
+  { "Version", 1610874883, NULL },
+  { "v1", 1073741825, "0"},
+  { "v2", 1073741825, "1"},
+  { "v3", 1, "2"},
+  { "CertificateSerialNumber", 1073741827, NULL },
+  { "Validity", 1610612741, NULL },
+  { "notBefore", 1073741826, "Time"},
+  { "notAfter", 2, "Time"},
+  { "Time", 1610612754, NULL },
+  { "utcTime", 1090519057, NULL },
+  { "generalTime", 8388625, NULL },
+  { "UniqueIdentifier", 1073741830, NULL },
+  { "SubjectPublicKeyInfo", 1610612741, NULL },
+  { "algorithm", 1073741826, "AlgorithmIdentifier"},
+  { "subjectPublicKey", 6, NULL },
+  { "Extensions", 1612709899, NULL },
+  { "MAX", 1074266122, "1"},
+  { NULL, 2, "Extension"},
+  { "Extension", 1610612741, NULL },
+  { "extnID", 1073741836, NULL },
+  { "critical", 1610645508, NULL },
+  { NULL, 131081, NULL },
+  { "extnValue", 7, NULL },
+  { "CertificateList", 1610612741, NULL },
+  { "tbsCertList", 1073741826, "TBSCertList"},
+  { "signatureAlgorithm", 1073741826, "AlgorithmIdentifier"},
+  { "signature", 6, NULL },
+  { "TBSCertList", 1610612741, NULL },
+  { "version", 1073758210, "Version"},
+  { "signature", 1073741826, "AlgorithmIdentifier"},
+  { "issuer", 1073741826, "Name"},
+  { "thisUpdate", 1073741826, "Time"},
+  { "nextUpdate", 1073758210, "Time"},
+  { "revokedCertificates", 1610629131, NULL },
+  { NULL, 536870917, NULL },
+  { "userCertificate", 1073741826, "CertificateSerialNumber"},
+  { "revocationDate", 1073741826, "Time"},
+  { "crlEntryExtensions", 16386, "Extensions"},
+  { "crlExtensions", 536895490, "Extensions"},
+  { NULL, 2056, "0"},
+  { "AlgorithmIdentifier", 1610612741, NULL },
+  { "algorithm", 1073741836, NULL },
+  { "parameters", 541081613, NULL },
+  { "algorithm", 1, NULL },
+  { "pkcs-1", 1879048204, NULL },
+  { "iso", 1073741825, "1"},
+  { "member-body", 1073741825, "2"},
+  { "us", 1073741825, "840"},
+  { "rsadsi", 1073741825, "113549"},
+  { "pkcs", 1073741825, "1"},
+  { NULL, 1, "1"},
+  { "rsaEncryption", 1879048204, NULL },
+  { NULL, 1073741825, "pkcs-1"},
+  { NULL, 1, "1"},
+  { "md2WithRSAEncryption", 1879048204, NULL },
+  { NULL, 1073741825, "pkcs-1"},
+  { NULL, 1, "2"},
+  { "md5WithRSAEncryption", 1879048204, NULL },
+  { NULL, 1073741825, "pkcs-1"},
+  { NULL, 1, "4"},
+  { "sha1WithRSAEncryption", 1879048204, NULL },
+  { NULL, 1073741825, "pkcs-1"},
+  { NULL, 1, "5"},
+  { "id-dsa-with-sha1", 1879048204, NULL },
+  { "iso", 1073741825, "1"},
+  { "member-body", 1073741825, "2"},
+  { "us", 1073741825, "840"},
+  { "x9-57", 1073741825, "10040"},
+  { "x9algorithm", 1073741825, "4"},
+  { NULL, 1, "3"},
+  { "Dss-Sig-Value", 1610612741, NULL },
+  { "r", 1073741827, NULL },
+  { "s", 3, NULL },
+  { "dhpublicnumber", 1879048204, NULL },
+  { "iso", 1073741825, "1"},
+  { "member-body", 1073741825, "2"},
+  { "us", 1073741825, "840"},
+  { "ansi-x942", 1073741825, "10046"},
+  { "number-type", 1073741825, "2"},
+  { NULL, 1, "1"},
+  { "DomainParameters", 1610612741, NULL },
+  { "p", 1073741827, NULL },
+  { "g", 1073741827, NULL },
+  { "q", 1073741827, NULL },
+  { "j", 1073758211, NULL },
+  { "validationParms", 16386, "ValidationParms"},
+  { "ValidationParms", 1610612741, NULL },
+  { "seed", 1073741830, NULL },
+  { "pgenCounter", 3, NULL },
+  { "id-dsa", 1879048204, NULL },
+  { "iso", 1073741825, "1"},
+  { "member-body", 1073741825, "2"},
+  { "us", 1073741825, "840"},
+  { "x9-57", 1073741825, "10040"},
+  { "x9algorithm", 1073741825, "4"},
+  { NULL, 1, "1"},
+  { "Dss-Parms", 1610612741, NULL },
+  { "p", 1073741827, NULL },
+  { "q", 1073741827, NULL },
+  { "g", 3, NULL },
+  { "ORAddress", 1610612741, NULL },
+  { "built-in-standard-attributes", 1073741826, "BuiltInStandardAttributes"},
+  { "built-in-domain-defined-attributes", 1073758210, "BuiltInDomainDefinedAttributes"},
+  { "extension-attributes", 16386, "ExtensionAttributes"},
+  { "BuiltInStandardAttributes", 1610612741, NULL },
+  { "country-name", 1073758210, "CountryName"},
+  { "administration-domain-name", 1073758210, "AdministrationDomainName"},
+  { "network-address", 1610637314, "NetworkAddress"},
+  { NULL, 2056, "0"},
+  { "terminal-identifier", 1610637314, "TerminalIdentifier"},
+  { NULL, 2056, "1"},
+  { "private-domain-name", 1610637314, "PrivateDomainName"},
+  { NULL, 2056, "2"},
+  { "organization-name", 1610637314, "OrganizationName"},
+  { NULL, 2056, "3"},
+  { "numeric-user-identifier", 1610637314, "NumericUserIdentifier"},
+  { NULL, 2056, "4"},
+  { "personal-name", 1610637314, "PersonalName"},
+  { NULL, 2056, "5"},
+  { "organizational-unit-names", 536895490, "OrganizationalUnitNames"},
+  { NULL, 2056, "6"},
+  { "CountryName", 1610620946, NULL },
+  { NULL, 1073746952, "1"},
+  { "x121-dcc-code", 1612709890, "NumericString"},
+  { NULL, 1048586, "ub-country-name-numeric-length"},
+  { "iso-3166-alpha2-code", 538968066, "PrintableString"},
+  { NULL, 1048586, "ub-country-name-alpha-length"},
+  { "AdministrationDomainName", 1610620946, NULL },
+  { NULL, 1073744904, "2"},
+  { "numeric", 1612709890, "NumericString"},
+  { "ub-domain-name-length", 524298, "0"},
+  { "printable", 538968066, "PrintableString"},
+  { "ub-domain-name-length", 524298, "0"},
+  { "NetworkAddress", 1073741826, "X121Address"},
+  { "X121Address", 1612709890, "NumericString"},
+  { "ub-x121-address-length", 524298, "1"},
+  { "TerminalIdentifier", 1612709890, "PrintableString"},
+  { "ub-terminal-id-length", 524298, "1"},
+  { "PrivateDomainName", 1610612754, NULL },
+  { "numeric", 1612709890, "NumericString"},
+  { "ub-domain-name-length", 524298, "1"},
+  { "printable", 538968066, "PrintableString"},
+  { "ub-domain-name-length", 524298, "1"},
+  { "OrganizationName", 1612709890, "PrintableString"},
+  { "ub-organization-name-length", 524298, "1"},
+  { "NumericUserIdentifier", 1612709890, "NumericString"},
+  { "ub-numeric-user-id-length", 524298, "1"},
+  { "PersonalName", 1610612750, NULL },
+  { "surname", 1814044674, "PrintableString"},
+  { NULL, 1073745928, "0"},
+  { "ub-surname-length", 524298, "1"},
+  { "given-name", 1814061058, "PrintableString"},
+  { NULL, 1073745928, "1"},
+  { "ub-given-name-length", 524298, "1"},
+  { "initials", 1814061058, "PrintableString"},
+  { NULL, 1073745928, "2"},
+  { "ub-initials-length", 524298, "1"},
+  { "generation-qualifier", 740319234, "PrintableString"},
+  { NULL, 1073745928, "3"},
+  { "ub-generation-qualifier-length", 524298, "1"},
+  { "OrganizationalUnitNames", 1612709899, NULL },
+  { "ub-organizational-units", 1074266122, "1"},
+  { NULL, 2, "OrganizationalUnitName"},
+  { "OrganizationalUnitName", 1612709890, "PrintableString"},
+  { "ub-organizational-unit-name-length", 524298, "1"},
+  { "BuiltInDomainDefinedAttributes", 1612709899, NULL },
+  { "ub-domain-defined-attributes", 1074266122, "1"},
+  { NULL, 2, "BuiltInDomainDefinedAttribute"},
+  { "BuiltInDomainDefinedAttribute", 1610612741, NULL },
+  { "type", 1612709890, "PrintableString"},
+  { "ub-domain-defined-attribute-type-length", 524298, "1"},
+  { "value", 538968066, "PrintableString"},
+  { "ub-domain-defined-attribute-value-length", 524298, "1"},
+  { "ExtensionAttributes", 1612709903, NULL },
+  { "ub-extension-attributes", 1074266122, "1"},
+  { NULL, 2, "ExtensionAttribute"},
+  { "ExtensionAttribute", 1610612741, NULL },
+  { "extension-attribute-type", 1611145219, NULL },
+  { NULL, 1073743880, "0"},
+  { "0", 10, "ub-extension-attributes"},
+  { "extension-attribute-value", 541073421, NULL },
+  { NULL, 1073743880, "1"},
+  { "extension-attribute-type", 1, NULL },
+  { "common-name", 1342177283, "1"},
+  { "CommonName", 1612709890, "PrintableString"},
+  { "ub-common-name-length", 524298, "1"},
+  { "teletex-common-name", 1342177283, "2"},
+  { "TeletexCommonName", 1612709890, "TeletexString"},
+  { "ub-common-name-length", 524298, "1"},
+  { "teletex-organization-name", 1342177283, "3"},
+  { "TeletexOrganizationName", 1612709890, "TeletexString"},
+  { "ub-organization-name-length", 524298, "1"},
+  { "teletex-personal-name", 1342177283, "4"},
+  { "TeletexPersonalName", 1610612750, NULL },
+  { "surname", 1814044674, "TeletexString"},
+  { NULL, 1073743880, "0"},
+  { "ub-surname-length", 524298, "1"},
+  { "given-name", 1814061058, "TeletexString"},
+  { NULL, 1073743880, "1"},
+  { "ub-given-name-length", 524298, "1"},
+  { "initials", 1814061058, "TeletexString"},
+  { NULL, 1073743880, "2"},
+  { "ub-initials-length", 524298, "1"},
+  { "generation-qualifier", 740319234, "TeletexString"},
+  { NULL, 1073743880, "3"},
+  { "ub-generation-qualifier-length", 524298, "1"},
+  { "teletex-organizational-unit-names", 1342177283, "5"},
+  { "TeletexOrganizationalUnitNames", 1612709899, NULL },
+  { "ub-organizational-units", 1074266122, "1"},
+  { NULL, 2, "TeletexOrganizationalUnitName"},
+  { "TeletexOrganizationalUnitName", 1612709890, "TeletexString"},
+  { "ub-organizational-unit-name-length", 524298, "1"},
+  { "pds-name", 1342177283, "7"},
+  { "PDSName", 1612709890, "PrintableString"},
+  { "ub-pds-name-length", 524298, "1"},
+  { "physical-delivery-country-name", 1342177283, "8"},
+  { "PhysicalDeliveryCountryName", 1610612754, NULL },
+  { "x121-dcc-code", 1612709890, "NumericString"},
+  { NULL, 1048586, "ub-country-name-numeric-length"},
+  { "iso-3166-alpha2-code", 538968066, "PrintableString"},
+  { NULL, 1048586, "ub-country-name-alpha-length"},
+  { "postal-code", 1342177283, "9"},
+  { "PostalCode", 1610612754, NULL },
+  { "numeric-code", 1612709890, "NumericString"},
+  { "ub-postal-code-length", 524298, "1"},
+  { "printable-code", 538968066, "PrintableString"},
+  { "ub-postal-code-length", 524298, "1"},
+  { "physical-delivery-office-name", 1342177283, "10"},
+  { "PhysicalDeliveryOfficeName", 1073741826, "PDSParameter"},
+  { "physical-delivery-office-number", 1342177283, "11"},
+  { "PhysicalDeliveryOfficeNumber", 1073741826, "PDSParameter"},
+  { "extension-OR-address-components", 1342177283, "12"},
+  { "ExtensionORAddressComponents", 1073741826, "PDSParameter"},
+  { "physical-delivery-personal-name", 1342177283, "13"},
+  { "PhysicalDeliveryPersonalName", 1073741826, "PDSParameter"},
+  { "physical-delivery-organization-name", 1342177283, "14"},
+  { "PhysicalDeliveryOrganizationName", 1073741826, "PDSParameter"},
+  { "extension-physical-delivery-address-components", 1342177283, "15"},
+  { "ExtensionPhysicalDeliveryAddressComponents", 1073741826, "PDSParameter"},
+  { "unformatted-postal-address", 1342177283, "16"},
+  { "UnformattedPostalAddress", 1610612750, NULL },
+  { "printable-address", 1814052875, NULL },
+  { "ub-pds-physical-address-lines", 1074266122, "1"},
+  { NULL, 538968066, "PrintableString"},
+  { "ub-pds-parameter-length", 524298, "1"},
+  { "teletex-string", 740311042, "TeletexString"},
+  { "ub-unformatted-address-length", 524298, "1"},
+  { "street-address", 1342177283, "17"},
+  { "StreetAddress", 1073741826, "PDSParameter"},
+  { "post-office-box-address", 1342177283, "18"},
+  { "PostOfficeBoxAddress", 1073741826, "PDSParameter"},
+  { "poste-restante-address", 1342177283, "19"},
+  { "PosteRestanteAddress", 1073741826, "PDSParameter"},
+  { "unique-postal-name", 1342177283, "20"},
+  { "UniquePostalName", 1073741826, "PDSParameter"},
+  { "local-postal-attributes", 1342177283, "21"},
+  { "LocalPostalAttributes", 1073741826, "PDSParameter"},
+  { "PDSParameter", 1610612750, NULL },
+  { "printable-string", 1814052866, "PrintableString"},
+  { "ub-pds-parameter-length", 524298, "1"},
+  { "teletex-string", 740311042, "TeletexString"},
+  { "ub-pds-parameter-length", 524298, "1"},
+  { "extended-network-address", 1342177283, "22"},
+  { "ExtendedNetworkAddress", 1610612754, NULL },
+  { "e163-4-address", 1610612741, NULL },
+  { "number", 1612718082, "NumericString"},
+  { NULL, 1073743880, "0"},
+  { "ub-e163-4-number-length", 524298, "1"},
+  { "sub-address", 538992642, "NumericString"},
+  { NULL, 1073743880, "1"},
+  { "ub-e163-4-sub-address-length", 524298, "1"},
+  { "psap-address", 536879106, "PresentationAddress"},
+  { NULL, 2056, "0"},
+  { "PresentationAddress", 1610612741, NULL },
+  { "pSelector", 1610637319, NULL },
+  { NULL, 2056, "0"},
+  { "sSelector", 1610637319, NULL },
+  { NULL, 2056, "1"},
+  { "tSelector", 1610637319, NULL },
+  { NULL, 2056, "2"},
+  { "nAddresses", 538976271, NULL },
+  { NULL, 1073743880, "3"},
+  { "MAX", 1074266122, "1"},
+  { NULL, 7, NULL },
+  { "terminal-type", 1342177283, "23"},
+  { "TerminalType", 1611137027, NULL },
+  { "0", 10, "ub-integer-options"},
+  { "teletex-domain-defined-attributes", 1342177283, "6"},
+  { "TeletexDomainDefinedAttributes", 1612709899, NULL },
+  { "ub-domain-defined-attributes", 1074266122, "1"},
+  { NULL, 2, "TeletexDomainDefinedAttribute"},
+  { "TeletexDomainDefinedAttribute", 1610612741, NULL },
+  { "type", 1612709890, "TeletexString"},
+  { "ub-domain-defined-attribute-type-length", 524298, "1"},
+  { "value", 538968066, "TeletexString"},
+  { "ub-domain-defined-attribute-value-length", 524298, "1"},
+  { "ub-name", 1342177283, "32768"},
+  { "ub-common-name", 1342177283, "64"},
+  { "ub-locality-name", 1342177283, "128"},
+  { "ub-state-name", 1342177283, "128"},
+  { "ub-organization-name", 1342177283, "64"},
+  { "ub-organizational-unit-name", 1342177283, "64"},
+  { "ub-title", 1342177283, "64"},
+  { "ub-match", 1342177283, "128"},
+  { "ub-emailaddress-length", 1342177283, "128"},
+  { "ub-common-name-length", 1342177283, "64"},
+  { "ub-country-name-alpha-length", 1342177283, "2"},
+  { "ub-country-name-numeric-length", 1342177283, "3"},
+  { "ub-domain-defined-attributes", 1342177283, "4"},
+  { "ub-domain-defined-attribute-type-length", 1342177283, "8"},
+  { "ub-domain-defined-attribute-value-length", 1342177283, "128"},
+  { "ub-domain-name-length", 1342177283, "16"},
+  { "ub-extension-attributes", 1342177283, "256"},
+  { "ub-e163-4-number-length", 1342177283, "15"},
+  { "ub-e163-4-sub-address-length", 1342177283, "40"},
+  { "ub-generation-qualifier-length", 1342177283, "3"},
+  { "ub-given-name-length", 1342177283, "16"},
+  { "ub-initials-length", 1342177283, "5"},
+  { "ub-integer-options", 1342177283, "256"},
+  { "ub-numeric-user-id-length", 1342177283, "32"},
+  { "ub-organization-name-length", 1342177283, "64"},
+  { "ub-organizational-unit-name-length", 1342177283, "32"},
+  { "ub-organizational-units", 1342177283, "4"},
+  { "ub-pds-name-length", 1342177283, "16"},
+  { "ub-pds-parameter-length", 1342177283, "30"},
+  { "ub-pds-physical-address-lines", 1342177283, "6"},
+  { "ub-postal-code-length", 1342177283, "16"},
+  { "ub-surname-length", 1342177283, "40"},
+  { "ub-terminal-id-length", 1342177283, "24"},
+  { "ub-unformatted-address-length", 1342177283, "180"},
+  { "ub-x121-address-length", 268435459, "16"},
+  { NULL, 0, NULL }
+};
diff --git a/gl/Makefile.am b/gl/Makefile.am
new file mode 100644 (file)
index 0000000..c151a71
--- /dev/null
@@ -0,0 +1,585 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs getopt-gnu maintainer-makefile manywarnings pmccabe2html progname read-file stdint update-copyright valgrind-tests version-etc-fsf warnings
+
+AUTOMAKE_OPTIONS = 1.5 gnits
+
+SUBDIRS =
+noinst_HEADERS =
+noinst_LIBRARIES =
+noinst_LTLIBRARIES =
+EXTRA_DIST =
+BUILT_SOURCES =
+SUFFIXES =
+MOSTLYCLEANFILES = core *.stackdump
+MOSTLYCLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+EXTRA_DIST += m4/gnulib-cache.m4
+
+AM_CPPFLAGS =
+AM_CFLAGS =
+
+noinst_LTLIBRARIES += libgnu.la
+
+libgnu_la_SOURCES =
+libgnu_la_LIBADD = $(gl_LTLIBOBJS)
+libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
+EXTRA_libgnu_la_SOURCES =
+libgnu_la_LDFLAGS = $(AM_LDFLAGS)
+
+## begin gnulib module arg-nonnull
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += arg-nonnull.h
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
+arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/GL_ARG_NONNULL/,$$p' \
+         < $(top_srcdir)/build-aux/arg-nonnull.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+
+ARG_NONNULL_H=arg-nonnull.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/arg-nonnull.h
+
+## end   gnulib module arg-nonnull
+
+## begin gnulib module c++defs
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += c++defs.h
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/c++defs.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/_GL_CXXDEFS/,$$p' \
+         < $(top_srcdir)/build-aux/c++defs.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+
+CXXDEFS_H=c++defs.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/c++defs.h
+
+## end   gnulib module c++defs
+
+## begin gnulib module gendocs
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh
+
+## end   gnulib module gendocs
+
+## begin gnulib module getopt-posix
+
+BUILT_SOURCES += $(GETOPT_H)
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             < $(srcdir)/getopt.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += getopt.h getopt.h-t
+
+EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h
+
+EXTRA_libgnu_la_SOURCES += getopt.c getopt1.c
+
+## end   gnulib module getopt-posix
+
+## begin gnulib module gettext-h
+
+libgnu_la_SOURCES += gettext.h
+
+## end   gnulib module gettext-h
+
+## begin gnulib module gnumakefile
+
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+       test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || :
+
+EXTRA_DIST += $(top_srcdir)/GNUmakefile
+
+## end   gnulib module gnumakefile
+
+## begin gnulib module maintainer-makefile
+
+EXTRA_DIST += $(top_srcdir)/maint.mk
+
+## end   gnulib module maintainer-makefile
+
+## begin gnulib module pmccabe2html
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/pmccabe2html $(top_srcdir)/build-aux/pmccabe.css
+
+## end   gnulib module pmccabe2html
+
+## begin gnulib module progname
+
+libgnu_la_SOURCES += progname.h progname.c
+
+## end   gnulib module progname
+
+## begin gnulib module read-file
+
+
+EXTRA_DIST += read-file.c read-file.h
+
+EXTRA_libgnu_la_SOURCES += read-file.c
+
+## end   gnulib module read-file
+
+## begin gnulib module realloc-posix
+
+
+EXTRA_DIST += realloc.c
+
+EXTRA_libgnu_la_SOURCES += realloc.c
+
+## end   gnulib module realloc-posix
+
+## begin gnulib module stdarg
+
+BUILT_SOURCES += $(STDARG_H)
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+stdarg.h: stdarg.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+             < $(srcdir)/stdarg.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdarg.h stdarg.h-t
+
+EXTRA_DIST += stdarg.in.h
+
+## end   gnulib module stdarg
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+stddef.h: stddef.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(srcdir)/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             < $(srcdir)/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module stdlib
+
+BUILT_SOURCES += stdlib.h
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+             -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
+             -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_CANONICALIZE_FILE_NAME''@|$(GNULIB_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
+             -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
+             -e 's|@''GNULIB_GRANTPT''@|$(GNULIB_GRANTPT)|g' \
+             -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMPS''@|$(GNULIB_MKOSTEMPS)|g' \
+             -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+             -e 's|@''GNULIB_MKSTEMPS''@|$(GNULIB_MKSTEMPS)|g' \
+             -e 's|@''GNULIB_PTSNAME''@|$(GNULIB_PTSNAME)|g' \
+             -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
+             -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
+             -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \
+             -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
+             -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
+             -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
+             -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
+             -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
+             -e 's|@''GNULIB_UNLOCKPT''@|$(GNULIB_UNLOCKPT)|g' \
+             -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
+             -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+             -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
+             -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+             -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+             -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+             -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
+             -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+             -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+             -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+             -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+             -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+             -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+             -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
+             -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+             -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+             -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
+             -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+             -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+             -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+             -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+             -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+             -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+             -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
+             -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+             -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+             -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+             -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+             -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+             -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/stdlib.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdlib.h stdlib.h-t
+
+EXTRA_DIST += stdlib.in.h
+
+## end   gnulib module stdlib
+
+## begin gnulib module unistd
+
+BUILT_SOURCES += unistd.h
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+             -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
+             -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
+             -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+             -e 's|@''GNULIB_DUP3''@|$(GNULIB_DUP3)|g' \
+             -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
+             -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
+             -e 's|@''GNULIB_FACCESSAT''@|$(GNULIB_FACCESSAT)|g' \
+             -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
+             -e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
+             -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
+             -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
+             -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
+             -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
+             -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
+             -e 's|@''GNULIB_GETGROUPS''@|$(GNULIB_GETGROUPS)|g' \
+             -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
+             -e 's|@''GNULIB_GETLOGIN''@|$(GNULIB_GETLOGIN)|g' \
+             -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
+             -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
+             -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
+             -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
+             -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
+             -e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
+             -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
+             -e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
+             -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|g' \
+             -e 's|@''GNULIB_PWRITE''@|$(GNULIB_PWRITE)|g' \
+             -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
+             -e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
+             -e 's|@''GNULIB_RMDIR''@|$(GNULIB_RMDIR)|g' \
+             -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
+             -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \
+             -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
+             -e 's|@''GNULIB_TTYNAME_R''@|$(GNULIB_TTYNAME_R)|g' \
+             -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|g' \
+             -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
+             -e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
+             -e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
+             -e 's|@''GNULIB_USLEEP''@|$(GNULIB_USLEEP)|g' \
+             -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
+             < $(srcdir)/unistd.in.h | \
+         sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+             -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+             -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+             -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+             -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+             -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+             -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+             -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+             -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+             -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
+             -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+             -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+             -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+             -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+             -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+             -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+             -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+             -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+             -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+             -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+             -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+             -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+             -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+             -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+             -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+             -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+             -e 's|@''HAVE_TTYNAME_R''@|$(HAVE_TTYNAME_R)|g' \
+             -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+             -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+             -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+             -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+             -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+             -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+             -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+             -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+             -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+             -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+             -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+             -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+             -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+             -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+             -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+             -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+             -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+             -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+             -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+             -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+             -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+             -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+             -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+             -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+             -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+             -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+             -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+             -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+             -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+             -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+             -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += unistd.h unistd.h-t
+
+EXTRA_DIST += unistd.in.h
+
+## end   gnulib module unistd
+
+## begin gnulib module update-copyright
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/update-copyright
+
+## end   gnulib module update-copyright
+
+## begin gnulib module useless-if-before-free
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free
+
+## end   gnulib module useless-if-before-free
+
+## begin gnulib module vc-list-files
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files
+
+## end   gnulib module vc-list-files
+
+## begin gnulib module version-etc
+
+libgnu_la_SOURCES += version-etc.h version-etc.c
+
+## end   gnulib module version-etc
+
+## begin gnulib module version-etc-fsf
+
+libgnu_la_SOURCES += version-etc-fsf.c
+
+## end   gnulib module version-etc-fsf
+
+## begin gnulib module warn-on-use
+
+BUILT_SOURCES += warn-on-use.h
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/warn-on-use.h, except that it has the copyright header cut off.
+warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/^.ifndef/,$$p' \
+         < $(top_srcdir)/build-aux/warn-on-use.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+
+WARN_ON_USE_H=warn-on-use.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/warn-on-use.h
+
+## end   gnulib module warn-on-use
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
+             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
+             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
+             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
+             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
+             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
+             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
+             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
+             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
+             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
+             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+           < $(srcdir)/wchar.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end   gnulib module wchar
+
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
diff --git a/gl/Makefile.in b/gl/Makefile.in
new file mode 100644 (file)
index 0000000..87a5d03
--- /dev/null
@@ -0,0 +1,1419 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs getopt-gnu maintainer-makefile manywarnings pmccabe2html progname read-file stdint update-copyright valgrind-tests version-etc-fsf warnings
+
+
+
+VPATH = @srcdir@
+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 = gl
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_libgnu_la_OBJECTS = progname.lo version-etc.lo version-etc-fsf.lo
+libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS)
+libgnu_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
+DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+HEADERS = $(noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+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@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+AUTOMAKE_OPTIONS = 1.5 gnits
+SUBDIRS = 
+noinst_HEADERS = 
+noinst_LIBRARIES = 
+noinst_LTLIBRARIES = libgnu.la
+EXTRA_DIST = m4/gnulib-cache.m4 $(top_srcdir)/build-aux/arg-nonnull.h \
+       $(top_srcdir)/build-aux/c++defs.h \
+       $(top_srcdir)/build-aux/gendocs.sh getopt.c getopt.in.h \
+       getopt1.c getopt_int.h $(top_srcdir)/GNUmakefile \
+       $(top_srcdir)/maint.mk $(top_srcdir)/build-aux/pmccabe2html \
+       $(top_srcdir)/build-aux/pmccabe.css read-file.c read-file.h \
+       realloc.c stdarg.in.h stddef.in.h stdint.in.h stdlib.in.h \
+       unistd.in.h $(top_srcdir)/build-aux/update-copyright \
+       $(top_srcdir)/build-aux/useless-if-before-free \
+       $(top_srcdir)/build-aux/vc-list-files \
+       $(top_srcdir)/build-aux/warn-on-use.h wchar.in.h
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+BUILT_SOURCES = arg-nonnull.h c++defs.h $(GETOPT_H) $(STDARG_H) \
+       $(STDDEF_H) $(STDINT_H) stdlib.h unistd.h warn-on-use.h \
+       wchar.h
+SUFFIXES = 
+MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \
+       c++defs.h c++defs.h-t getopt.h getopt.h-t stdarg.h stdarg.h-t \
+       stddef.h stddef.h-t stdint.h stdint.h-t stdlib.h stdlib.h-t \
+       unistd.h unistd.h-t warn-on-use.h warn-on-use.h-t wchar.h \
+       wchar.h-t
+MOSTLYCLEANDIRS = 
+CLEANFILES = 
+DISTCLEANFILES = 
+MAINTAINERCLEANFILES = 
+AM_CPPFLAGS = 
+AM_CFLAGS = 
+libgnu_la_SOURCES = gettext.h progname.h progname.c version-etc.h \
+       version-etc.c version-etc-fsf.c
+libgnu_la_LIBADD = $(gl_LTLIBOBJS)
+libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS)
+EXTRA_libgnu_la_SOURCES = getopt.c getopt1.c read-file.c realloc.c
+libgnu_la_LDFLAGS = $(AM_LDFLAGS)
+ARG_NONNULL_H = arg-nonnull.h
+CXXDEFS_H = c++defs.h
+WARN_ON_USE_H = warn-on-use.h
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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) --gnits gl/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits gl/Makefile
+.PRECIOUS: 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):
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) 
+       $(libgnu_la_LINK)  $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-file.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc-fsf.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       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; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+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 \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           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
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) 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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+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)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-local distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+       ctags-recursive install install-am install-strip \
+       tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \
+       ctags-recursive distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-local 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-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \
+       uninstall uninstall-am
+
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
+arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/GL_ARG_NONNULL/,$$p' \
+         < $(top_srcdir)/build-aux/arg-nonnull.h \
+         > $@-t && \
+       mv $@-t $@
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/c++defs.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/_GL_CXXDEFS/,$$p' \
+         < $(top_srcdir)/build-aux/c++defs.h \
+         > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <getopt.h> when the system
+# doesn't have one that works with the given compiler.
+getopt.h: getopt.in.h $(ARG_NONNULL_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             < $(srcdir)/getopt.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+
+distclean-local: clean-GNUmakefile
+clean-GNUmakefile:
+       test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || :
+
+# We need the following in order to create <stdarg.h> when the system
+# doesn't have one that works with the given compiler.
+stdarg.h: stdarg.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \
+             < $(srcdir)/stdarg.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+stddef.h: stddef.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(srcdir)/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             < $(srcdir)/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdlib.h> when the system
+# doesn't have one that works with the given compiler.
+stdlib.h: stdlib.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \
+             -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \
+             -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_CANONICALIZE_FILE_NAME''@|$(GNULIB_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \
+             -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \
+             -e 's|@''GNULIB_GRANTPT''@|$(GNULIB_GRANTPT)|g' \
+             -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMP''@|$(GNULIB_MKOSTEMP)|g' \
+             -e 's|@''GNULIB_MKOSTEMPS''@|$(GNULIB_MKOSTEMPS)|g' \
+             -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \
+             -e 's|@''GNULIB_MKSTEMPS''@|$(GNULIB_MKSTEMPS)|g' \
+             -e 's|@''GNULIB_PTSNAME''@|$(GNULIB_PTSNAME)|g' \
+             -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \
+             -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \
+             -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \
+             -e 's|@''GNULIB_REALPATH''@|$(GNULIB_REALPATH)|g' \
+             -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \
+             -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \
+             -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \
+             -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \
+             -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \
+             -e 's|@''GNULIB_UNLOCKPT''@|$(GNULIB_UNLOCKPT)|g' \
+             -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \
+             -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \
+             -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \
+             -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \
+             -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \
+             -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \
+             -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \
+             -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \
+             -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \
+             -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \
+             -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \
+             -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \
+             -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \
+             -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \
+             -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \
+             -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \
+             -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \
+             -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \
+             -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \
+             -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \
+             -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \
+             -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \
+             -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \
+             -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \
+             -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \
+             -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \
+             -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \
+             -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \
+             -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \
+             -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \
+             -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \
+             -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(srcdir)/stdlib.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create an empty placeholder for
+# <unistd.h> when the system doesn't have one.
+unistd.h: unistd.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
+             -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
+             -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \
+             -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+             -e 's|@''GNULIB_DUP3''@|$(GNULIB_DUP3)|g' \
+             -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
+             -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \
+             -e 's|@''GNULIB_FACCESSAT''@|$(GNULIB_FACCESSAT)|g' \
+             -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
+             -e 's|@''GNULIB_FCHOWNAT''@|$(GNULIB_FCHOWNAT)|g' \
+             -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \
+             -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
+             -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
+             -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \
+             -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \
+             -e 's|@''GNULIB_GETGROUPS''@|$(GNULIB_GETGROUPS)|g' \
+             -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \
+             -e 's|@''GNULIB_GETLOGIN''@|$(GNULIB_GETLOGIN)|g' \
+             -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \
+             -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \
+             -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \
+             -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \
+             -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \
+             -e 's|@''GNULIB_LINKAT''@|$(GNULIB_LINKAT)|g' \
+             -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \
+             -e 's|@''GNULIB_PIPE2''@|$(GNULIB_PIPE2)|g' \
+             -e 's|@''GNULIB_PREAD''@|$(GNULIB_PREAD)|g' \
+             -e 's|@''GNULIB_PWRITE''@|$(GNULIB_PWRITE)|g' \
+             -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \
+             -e 's|@''GNULIB_READLINKAT''@|$(GNULIB_READLINKAT)|g' \
+             -e 's|@''GNULIB_RMDIR''@|$(GNULIB_RMDIR)|g' \
+             -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \
+             -e 's|@''GNULIB_SYMLINK''@|$(GNULIB_SYMLINK)|g' \
+             -e 's|@''GNULIB_SYMLINKAT''@|$(GNULIB_SYMLINKAT)|g' \
+             -e 's|@''GNULIB_TTYNAME_R''@|$(GNULIB_TTYNAME_R)|g' \
+             -e 's|@''GNULIB_UNISTD_H_GETOPT''@|$(GNULIB_UNISTD_H_GETOPT)|g' \
+             -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \
+             -e 's|@''GNULIB_UNLINK''@|$(GNULIB_UNLINK)|g' \
+             -e 's|@''GNULIB_UNLINKAT''@|$(GNULIB_UNLINKAT)|g' \
+             -e 's|@''GNULIB_USLEEP''@|$(GNULIB_USLEEP)|g' \
+             -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \
+             < $(srcdir)/unistd.in.h | \
+         sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \
+             -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \
+             -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \
+             -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \
+             -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \
+             -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \
+             -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \
+             -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \
+             -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \
+             -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \
+             -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \
+             -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \
+             -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \
+             -e 's|@''HAVE_GETLOGIN''@|$(HAVE_GETLOGIN)|g' \
+             -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
+             -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \
+             -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \
+             -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \
+             -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \
+             -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \
+             -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \
+             -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
+             -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \
+             -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+             -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \
+             -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \
+             -e 's|@''HAVE_TTYNAME_R''@|$(HAVE_TTYNAME_R)|g' \
+             -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \
+             -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \
+             -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
+             -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
+             -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \
+             -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \
+             -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
+             -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
+             -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \
+             -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \
+             -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \
+             -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \
+             -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \
+             -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \
+             -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \
+             -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \
+             -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \
+             -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \
+             -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \
+             -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \
+             -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \
+             -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \
+             -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \
+             -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \
+             -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \
+             -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \
+             -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \
+             -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \
+             -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \
+             -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \
+             -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \
+             -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/warn-on-use.h, except that it has the copyright header cut off.
+warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/^.ifndef/,$$p' \
+         < $(top_srcdir)/build-aux/warn-on-use.h \
+         > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
+             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
+             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
+             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
+             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
+             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
+             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
+             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
+             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
+             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
+             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+           < $(srcdir)/wchar.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
+
+# 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/gl/getopt.c b/gl/getopt.c
new file mode 100644 (file)
index 0000000..3791f12
--- /dev/null
@@ -0,0 +1,1192 @@
+/* Getopt for GNU.
+   NOTE: getopt is part of the C library, so if you don't know what
+   "Keep this file name-space clean" means, talk to drepper@gnu.org
+   before changing it!
+   Copyright (C) 1987-1996, 1998-2004, 2006, 2008-2010 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+\f
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include "getopt.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "gettext.h"
+# define _(msgid) gettext (msgid)
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+# include <wchar.h>
+#endif
+
+/* This version of `getopt' appears to the caller like standard Unix `getopt'
+   but it behaves differently for the user, since it allows the user
+   to intersperse the options with the other arguments.
+
+   As `getopt_long' works, it permutes the elements of ARGV so that,
+   when it is done, all the options precede everything else.  Thus
+   all application programs are extended to handle flexible argument order.
+
+   Using `getopt' or setting the environment variable POSIXLY_CORRECT
+   disables permutation.
+   Then the behavior is completely standard.
+
+   GNU application programs can use a third alternative mode in which
+   they can distinguish the relative order of options and other arguments.  */
+
+#include "getopt_int.h"
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+/* 1003.2 says this must be 1 before any call.  */
+int optind = 1;
+
+/* Callers store zero here to inhibit the error message
+   for unrecognized options.  */
+
+int opterr = 1;
+
+/* Set to an option character which was unrecognized.
+   This must be initialized on some systems to avoid linking in the
+   system's own getopt implementation.  */
+
+int optopt = '?';
+
+/* Keep a global copy of all internal members of getopt_data.  */
+
+static struct _getopt_data getopt_data;
+
+\f
+#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV
+extern char *getenv ();
+#endif
+\f
+#ifdef _LIBC
+/* Stored original parameters.
+   XXX This is no good solution.  We should rather copy the args so
+   that we can compare them later.  But we must not use malloc(3).  */
+extern int __libc_argc;
+extern char **__libc_argv;
+
+/* Bash 2.0 gives us an environment variable containing flags
+   indicating ARGV elements that should not be considered arguments.  */
+
+# ifdef USE_NONOPTION_FLAGS
+/* Defined in getopt_init.c  */
+extern char *__getopt_nonoption_flags;
+# endif
+
+# ifdef USE_NONOPTION_FLAGS
+#  define SWAP_FLAGS(ch1, ch2) \
+  if (d->__nonoption_flags_len > 0)                                           \
+    {                                                                         \
+      char __tmp = __getopt_nonoption_flags[ch1];                             \
+      __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];          \
+      __getopt_nonoption_flags[ch2] = __tmp;                                  \
+    }
+# else
+#  define SWAP_FLAGS(ch1, ch2)
+# endif
+#else   /* !_LIBC */
+# define SWAP_FLAGS(ch1, ch2)
+#endif  /* _LIBC */
+
+/* Exchange two adjacent subsequences of ARGV.
+   One subsequence is elements [first_nonopt,last_nonopt)
+   which contains all the non-options that have been skipped so far.
+   The other is elements [last_nonopt,optind), which contains all
+   the options processed since those non-options were skipped.
+
+   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   the new indices of the non-options in ARGV after they are moved.  */
+
+static void
+exchange (char **argv, struct _getopt_data *d)
+{
+  int bottom = d->__first_nonopt;
+  int middle = d->__last_nonopt;
+  int top = d->optind;
+  char *tem;
+
+  /* Exchange the shorter segment with the far end of the longer segment.
+     That puts the shorter segment into the right place.
+     It leaves the longer segment in the right place overall,
+     but it consists of two parts that need to be swapped next.  */
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+  /* First make sure the handling of the `__getopt_nonoption_flags'
+     string can work normally.  Our top argument must be in the range
+     of the string.  */
+  if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
+    {
+      /* We must extend the array.  The user plays games with us and
+         presents new arguments.  */
+      char *new_str = malloc (top + 1);
+      if (new_str == NULL)
+        d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0;
+      else
+        {
+          memset (__mempcpy (new_str, __getopt_nonoption_flags,
+                             d->__nonoption_flags_max_len),
+                  '\0', top + 1 - d->__nonoption_flags_max_len);
+          d->__nonoption_flags_max_len = top + 1;
+          __getopt_nonoption_flags = new_str;
+        }
+    }
+#endif
+
+  while (top > middle && middle > bottom)
+    {
+      if (top - middle > middle - bottom)
+        {
+          /* Bottom segment is the short one.  */
+          int len = middle - bottom;
+          register int i;
+
+          /* Swap it with the top part of the top segment.  */
+          for (i = 0; i < len; i++)
+            {
+              tem = argv[bottom + i];
+              argv[bottom + i] = argv[top - (middle - bottom) + i];
+              argv[top - (middle - bottom) + i] = tem;
+              SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+            }
+          /* Exclude the moved bottom segment from further swapping.  */
+          top -= len;
+        }
+      else
+        {
+          /* Top segment is the short one.  */
+          int len = top - middle;
+          register int i;
+
+          /* Swap it with the bottom part of the bottom segment.  */
+          for (i = 0; i < len; i++)
+            {
+              tem = argv[bottom + i];
+              argv[bottom + i] = argv[middle + i];
+              argv[middle + i] = tem;
+              SWAP_FLAGS (bottom + i, middle + i);
+            }
+          /* Exclude the moved top segment from further swapping.  */
+          bottom += len;
+        }
+    }
+
+  /* Update records for the slots the non-options now occupy.  */
+
+  d->__first_nonopt += (d->optind - d->__last_nonopt);
+  d->__last_nonopt = d->optind;
+}
+
+/* Initialize the internal data when the first call is made.  */
+
+static const char *
+_getopt_initialize (int argc _GL_UNUSED,
+                    char **argv _GL_UNUSED, const char *optstring,
+                    struct _getopt_data *d, int posixly_correct)
+{
+  /* Start processing options with ARGV-element 1 (since ARGV-element 0
+     is the program name); the sequence of previously skipped
+     non-option ARGV-elements is empty.  */
+
+  d->__first_nonopt = d->__last_nonopt = d->optind;
+
+  d->__nextchar = NULL;
+
+  d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT");
+
+  /* Determine how to handle the ordering of options and nonoptions.  */
+
+  if (optstring[0] == '-')
+    {
+      d->__ordering = RETURN_IN_ORDER;
+      ++optstring;
+    }
+  else if (optstring[0] == '+')
+    {
+      d->__ordering = REQUIRE_ORDER;
+      ++optstring;
+    }
+  else if (d->__posixly_correct)
+    d->__ordering = REQUIRE_ORDER;
+  else
+    d->__ordering = PERMUTE;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+  if (!d->__posixly_correct
+      && argc == __libc_argc && argv == __libc_argv)
+    {
+      if (d->__nonoption_flags_max_len == 0)
+        {
+          if (__getopt_nonoption_flags == NULL
+              || __getopt_nonoption_flags[0] == '\0')
+            d->__nonoption_flags_max_len = -1;
+          else
+            {
+              const char *orig_str = __getopt_nonoption_flags;
+              int len = d->__nonoption_flags_max_len = strlen (orig_str);
+              if (d->__nonoption_flags_max_len < argc)
+                d->__nonoption_flags_max_len = argc;
+              __getopt_nonoption_flags =
+                (char *) malloc (d->__nonoption_flags_max_len);
+              if (__getopt_nonoption_flags == NULL)
+                d->__nonoption_flags_max_len = -1;
+              else
+                memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+                        '\0', d->__nonoption_flags_max_len - len);
+            }
+        }
+      d->__nonoption_flags_len = d->__nonoption_flags_max_len;
+    }
+  else
+    d->__nonoption_flags_len = 0;
+#endif
+
+  return optstring;
+}
+\f
+/* Scan elements of ARGV (whose length is ARGC) for option characters
+   given in OPTSTRING.
+
+   If an element of ARGV starts with '-', and is not exactly "-" or "--",
+   then it is an option element.  The characters of this element
+   (aside from the initial '-') are option characters.  If `getopt'
+   is called repeatedly, it returns successively each of the option characters
+   from each of the option elements.
+
+   If `getopt' finds another option character, it returns that character,
+   updating `optind' and `nextchar' so that the next call to `getopt' can
+   resume the scan with the following option character or ARGV-element.
+
+   If there are no more option characters, `getopt' returns -1.
+   Then `optind' is the index in ARGV of the first ARGV-element
+   that is not an option.  (The ARGV-elements have been permuted
+   so that those that are not options now come last.)
+
+   OPTSTRING is a string containing the legitimate option characters.
+   If an option character is seen that is not listed in OPTSTRING,
+   return '?' after printing an error message.  If you set `opterr' to
+   zero, the error message is suppressed but we still return '?'.
+
+   If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+   so the following text in the same ARGV-element, or the text of the following
+   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   wants an optional arg; if there is text in the current ARGV-element,
+   it is returned in `optarg', otherwise `optarg' is set to zero.
+
+   If OPTSTRING starts with `-' or `+', it requests different methods of
+   handling the non-option ARGV-elements.
+   See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+
+   Long-named options begin with `--' instead of `-'.
+   Their names may be abbreviated as long as the abbreviation is unique
+   or is an exact match for some defined option.  If they have an
+   argument, it follows the option name in the same ARGV-element, separated
+   from the option name by a `=', or else the in next ARGV-element.
+   When `getopt' finds a long-named option, it returns 0 if that option's
+   `flag' field is nonzero, the value of the option's `val' field
+   if the `flag' field is zero.
+
+   The elements of ARGV aren't really const, because we permute them.
+   But we pretend they're const in the prototype to be compatible
+   with other systems.
+
+   LONGOPTS is a vector of `struct option' terminated by an
+   element containing a name which is zero.
+
+   LONGIND returns the index in LONGOPT of the long-named option found.
+   It is only valid when a long-named option has been found by the most
+   recent call.
+
+   If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+   long-named options.  */
+
+int
+_getopt_internal_r (int argc, char **argv, const char *optstring,
+                    const struct option *longopts, int *longind,
+                    int long_only, struct _getopt_data *d, int posixly_correct)
+{
+  int print_errors = d->opterr;
+
+  if (argc < 1)
+    return -1;
+
+  d->optarg = NULL;
+
+  if (d->optind == 0 || !d->__initialized)
+    {
+      if (d->optind == 0)
+        d->optind = 1;  /* Don't scan ARGV[0], the program name.  */
+      optstring = _getopt_initialize (argc, argv, optstring, d,
+                                      posixly_correct);
+      d->__initialized = 1;
+    }
+  else if (optstring[0] == '-' || optstring[0] == '+')
+    optstring++;
+  if (optstring[0] == ':')
+    print_errors = 0;
+
+  /* Test whether ARGV[optind] points to a non-option argument.
+     Either it does not have option syntax, or there is an environment flag
+     from the shell indicating it is not an option.  The later information
+     is only used when the used in the GNU libc.  */
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \
+                      || (d->optind < d->__nonoption_flags_len                \
+                          && __getopt_nonoption_flags[d->optind] == '1'))
+#else
+# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0')
+#endif
+
+  if (d->__nextchar == NULL || *d->__nextchar == '\0')
+    {
+      /* Advance to the next ARGV-element.  */
+
+      /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+         moved back by the user (who may also have changed the arguments).  */
+      if (d->__last_nonopt > d->optind)
+        d->__last_nonopt = d->optind;
+      if (d->__first_nonopt > d->optind)
+        d->__first_nonopt = d->optind;
+
+      if (d->__ordering == PERMUTE)
+        {
+          /* If we have just processed some options following some non-options,
+             exchange them so that the options come first.  */
+
+          if (d->__first_nonopt != d->__last_nonopt
+              && d->__last_nonopt != d->optind)
+            exchange ((char **) argv, d);
+          else if (d->__last_nonopt != d->optind)
+            d->__first_nonopt = d->optind;
+
+          /* Skip any additional non-options
+             and extend the range of non-options previously skipped.  */
+
+          while (d->optind < argc && NONOPTION_P)
+            d->optind++;
+          d->__last_nonopt = d->optind;
+        }
+
+      /* The special ARGV-element `--' means premature end of options.
+         Skip it like a null option,
+         then exchange with previous non-options as if it were an option,
+         then skip everything else like a non-option.  */
+
+      if (d->optind != argc && !strcmp (argv[d->optind], "--"))
+        {
+          d->optind++;
+
+          if (d->__first_nonopt != d->__last_nonopt
+              && d->__last_nonopt != d->optind)
+            exchange ((char **) argv, d);
+          else if (d->__first_nonopt == d->__last_nonopt)
+            d->__first_nonopt = d->optind;
+          d->__last_nonopt = argc;
+
+          d->optind = argc;
+        }
+
+      /* If we have done all the ARGV-elements, stop the scan
+         and back over any non-options that we skipped and permuted.  */
+
+      if (d->optind == argc)
+        {
+          /* Set the next-arg-index to point at the non-options
+             that we previously skipped, so the caller will digest them.  */
+          if (d->__first_nonopt != d->__last_nonopt)
+            d->optind = d->__first_nonopt;
+          return -1;
+        }
+
+      /* If we have come to a non-option and did not permute it,
+         either stop the scan or describe it to the caller and pass it by.  */
+
+      if (NONOPTION_P)
+        {
+          if (d->__ordering == REQUIRE_ORDER)
+            return -1;
+          d->optarg = argv[d->optind++];
+          return 1;
+        }
+
+      /* We have found another option-ARGV-element.
+         Skip the initial punctuation.  */
+
+      d->__nextchar = (argv[d->optind] + 1
+                  + (longopts != NULL && argv[d->optind][1] == '-'));
+    }
+
+  /* Decode the current option-ARGV-element.  */
+
+  /* Check whether the ARGV-element is a long option.
+
+     If long_only and the ARGV-element has the form "-f", where f is
+     a valid short option, don't consider it an abbreviated form of
+     a long option that starts with f.  Otherwise there would be no
+     way to give the -f short option.
+
+     On the other hand, if there's a long option "fubar" and
+     the ARGV-element is "-fu", do consider that an abbreviation of
+     the long option, just like "--fu", and not "-f" with arg "u".
+
+     This distinction seems to be the most useful approach.  */
+
+  if (longopts != NULL
+      && (argv[d->optind][1] == '-'
+          || (long_only && (argv[d->optind][2]
+                            || !strchr (optstring, argv[d->optind][1])))))
+    {
+      char *nameend;
+      const struct option *p;
+      const struct option *pfound = NULL;
+      int exact = 0;
+      int ambig = 0;
+      int indfound = -1;
+      int option_index;
+
+      for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++)
+        /* Do nothing.  */ ;
+
+      /* Test all long options for either exact match
+         or abbreviated matches.  */
+      for (p = longopts, option_index = 0; p->name; p++, option_index++)
+        if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+          {
+            if ((unsigned int) (nameend - d->__nextchar)
+                == (unsigned int) strlen (p->name))
+              {
+                /* Exact match found.  */
+                pfound = p;
+                indfound = option_index;
+                exact = 1;
+                break;
+              }
+            else if (pfound == NULL)
+              {
+                /* First nonexact match found.  */
+                pfound = p;
+                indfound = option_index;
+              }
+            else if (long_only
+                     || pfound->has_arg != p->has_arg
+                     || pfound->flag != p->flag
+                     || pfound->val != p->val)
+              /* Second or later nonexact match found.  */
+              ambig = 1;
+          }
+
+      if (ambig && !exact)
+        {
+          if (print_errors)
+            {
+#if defined _LIBC && defined USE_IN_LIBIO
+              char *buf;
+
+              if (__asprintf (&buf, _("%s: option '%s' is ambiguous\n"),
+                              argv[0], argv[d->optind]) >= 0)
+                {
+                  _IO_flockfile (stderr);
+
+                  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                  __fxprintf (NULL, "%s", buf);
+
+                  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                  _IO_funlockfile (stderr);
+
+                  free (buf);
+                }
+#else
+              fprintf (stderr, _("%s: option '%s' is ambiguous\n"),
+                       argv[0], argv[d->optind]);
+#endif
+            }
+          d->__nextchar += strlen (d->__nextchar);
+          d->optind++;
+          d->optopt = 0;
+          return '?';
+        }
+
+      if (pfound != NULL)
+        {
+          option_index = indfound;
+          d->optind++;
+          if (*nameend)
+            {
+              /* Don't test has_arg with >, because some C compilers don't
+                 allow it to be used on enums.  */
+              if (pfound->has_arg)
+                d->optarg = nameend + 1;
+              else
+                {
+                  if (print_errors)
+                    {
+#if defined _LIBC && defined USE_IN_LIBIO
+                      char *buf;
+                      int n;
+#endif
+
+                      if (argv[d->optind - 1][1] == '-')
+                        {
+                          /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                          n = __asprintf (&buf, _("\
+%s: option '--%s' doesn't allow an argument\n"),
+                                          argv[0], pfound->name);
+#else
+                          fprintf (stderr, _("\
+%s: option '--%s' doesn't allow an argument\n"),
+                                   argv[0], pfound->name);
+#endif
+                        }
+                      else
+                        {
+                          /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                          n = __asprintf (&buf, _("\
+%s: option '%c%s' doesn't allow an argument\n"),
+                                          argv[0], argv[d->optind - 1][0],
+                                          pfound->name);
+#else
+                          fprintf (stderr, _("\
+%s: option '%c%s' doesn't allow an argument\n"),
+                                   argv[0], argv[d->optind - 1][0],
+                                   pfound->name);
+#endif
+                        }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+                      if (n >= 0)
+                        {
+                          _IO_flockfile (stderr);
+
+                          int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                          ((_IO_FILE *) stderr)->_flags2
+                            |= _IO_FLAGS2_NOTCANCEL;
+
+                          __fxprintf (NULL, "%s", buf);
+
+                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                          _IO_funlockfile (stderr);
+
+                          free (buf);
+                        }
+#endif
+                    }
+
+                  d->__nextchar += strlen (d->__nextchar);
+
+                  d->optopt = pfound->val;
+                  return '?';
+                }
+            }
+          else if (pfound->has_arg == 1)
+            {
+              if (d->optind < argc)
+                d->optarg = argv[d->optind++];
+              else
+                {
+                  if (print_errors)
+                    {
+#if defined _LIBC && defined USE_IN_LIBIO
+                      char *buf;
+
+                      if (__asprintf (&buf, _("\
+%s: option '--%s' requires an argument\n"),
+                                      argv[0], pfound->name) >= 0)
+                        {
+                          _IO_flockfile (stderr);
+
+                          int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                          ((_IO_FILE *) stderr)->_flags2
+                            |= _IO_FLAGS2_NOTCANCEL;
+
+                          __fxprintf (NULL, "%s", buf);
+
+                          ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                          _IO_funlockfile (stderr);
+
+                          free (buf);
+                        }
+#else
+                      fprintf (stderr,
+                               _("%s: option '--%s' requires an argument\n"),
+                               argv[0], pfound->name);
+#endif
+                    }
+                  d->__nextchar += strlen (d->__nextchar);
+                  d->optopt = pfound->val;
+                  return optstring[0] == ':' ? ':' : '?';
+                }
+            }
+          d->__nextchar += strlen (d->__nextchar);
+          if (longind != NULL)
+            *longind = option_index;
+          if (pfound->flag)
+            {
+              *(pfound->flag) = pfound->val;
+              return 0;
+            }
+          return pfound->val;
+        }
+
+      /* Can't find it as a long option.  If this is not getopt_long_only,
+         or the option starts with '--' or is not a valid short
+         option, then it's an error.
+         Otherwise interpret it as a short option.  */
+      if (!long_only || argv[d->optind][1] == '-'
+          || strchr (optstring, *d->__nextchar) == NULL)
+        {
+          if (print_errors)
+            {
+#if defined _LIBC && defined USE_IN_LIBIO
+              char *buf;
+              int n;
+#endif
+
+              if (argv[d->optind][1] == '-')
+                {
+                  /* --option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                  n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"),
+                                  argv[0], d->__nextchar);
+#else
+                  fprintf (stderr, _("%s: unrecognized option '--%s'\n"),
+                           argv[0], d->__nextchar);
+#endif
+                }
+              else
+                {
+                  /* +option or -option */
+#if defined _LIBC && defined USE_IN_LIBIO
+                  n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"),
+                                  argv[0], argv[d->optind][0], d->__nextchar);
+#else
+                  fprintf (stderr, _("%s: unrecognized option '%c%s'\n"),
+                           argv[0], argv[d->optind][0], d->__nextchar);
+#endif
+                }
+
+#if defined _LIBC && defined USE_IN_LIBIO
+              if (n >= 0)
+                {
+                  _IO_flockfile (stderr);
+
+                  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                  __fxprintf (NULL, "%s", buf);
+
+                  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                  _IO_funlockfile (stderr);
+
+                  free (buf);
+                }
+#endif
+            }
+          d->__nextchar = (char *) "";
+          d->optind++;
+          d->optopt = 0;
+          return '?';
+        }
+    }
+
+  /* Look at and handle the next short option-character.  */
+
+  {
+    char c = *d->__nextchar++;
+    const char *temp = strchr (optstring, c);
+
+    /* Increment `optind' when we start to process its last character.  */
+    if (*d->__nextchar == '\0')
+      ++d->optind;
+
+    if (temp == NULL || c == ':' || c == ';')
+      {
+        if (print_errors)
+          {
+#if defined _LIBC && defined USE_IN_LIBIO
+              char *buf;
+              int n;
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+              n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"),
+                              argv[0], c);
+#else
+              fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c);
+#endif
+
+#if defined _LIBC && defined USE_IN_LIBIO
+            if (n >= 0)
+              {
+                _IO_flockfile (stderr);
+
+                int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                __fxprintf (NULL, "%s", buf);
+
+                ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                _IO_funlockfile (stderr);
+
+                free (buf);
+              }
+#endif
+          }
+        d->optopt = c;
+        return '?';
+      }
+    /* Convenience. Treat POSIX -W foo same as long option --foo */
+    if (temp[0] == 'W' && temp[1] == ';')
+      {
+        char *nameend;
+        const struct option *p;
+        const struct option *pfound = NULL;
+        int exact = 0;
+        int ambig = 0;
+        int indfound = 0;
+        int option_index;
+
+        /* This is an option that requires an argument.  */
+        if (*d->__nextchar != '\0')
+          {
+            d->optarg = d->__nextchar;
+            /* If we end this ARGV-element by taking the rest as an arg,
+               we must advance to the next element now.  */
+            d->optind++;
+          }
+        else if (d->optind == argc)
+          {
+            if (print_errors)
+              {
+#if defined _LIBC && defined USE_IN_LIBIO
+                char *buf;
+
+                if (__asprintf (&buf,
+                                _("%s: option requires an argument -- '%c'\n"),
+                                argv[0], c) >= 0)
+                  {
+                    _IO_flockfile (stderr);
+
+                    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                    __fxprintf (NULL, "%s", buf);
+
+                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                    _IO_funlockfile (stderr);
+
+                    free (buf);
+                  }
+#else
+                fprintf (stderr,
+                         _("%s: option requires an argument -- '%c'\n"),
+                         argv[0], c);
+#endif
+              }
+            d->optopt = c;
+            if (optstring[0] == ':')
+              c = ':';
+            else
+              c = '?';
+            return c;
+          }
+        else
+          /* We already incremented `d->optind' once;
+             increment it again when taking next ARGV-elt as argument.  */
+          d->optarg = argv[d->optind++];
+
+        /* optarg is now the argument, see if it's in the
+           table of longopts.  */
+
+        for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '=';
+             nameend++)
+          /* Do nothing.  */ ;
+
+        /* Test all long options for either exact match
+           or abbreviated matches.  */
+        for (p = longopts, option_index = 0; p->name; p++, option_index++)
+          if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar))
+            {
+              if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name))
+                {
+                  /* Exact match found.  */
+                  pfound = p;
+                  indfound = option_index;
+                  exact = 1;
+                  break;
+                }
+              else if (pfound == NULL)
+                {
+                  /* First nonexact match found.  */
+                  pfound = p;
+                  indfound = option_index;
+                }
+              else if (long_only
+                       || pfound->has_arg != p->has_arg
+                       || pfound->flag != p->flag
+                       || pfound->val != p->val)
+                /* Second or later nonexact match found.  */
+                ambig = 1;
+            }
+        if (ambig && !exact)
+          {
+            if (print_errors)
+              {
+#if defined _LIBC && defined USE_IN_LIBIO
+                char *buf;
+
+                if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"),
+                                argv[0], d->optarg) >= 0)
+                  {
+                    _IO_flockfile (stderr);
+
+                    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                    __fxprintf (NULL, "%s", buf);
+
+                    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                    _IO_funlockfile (stderr);
+
+                    free (buf);
+                  }
+#else
+                fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"),
+                         argv[0], d->optarg);
+#endif
+              }
+            d->__nextchar += strlen (d->__nextchar);
+            d->optind++;
+            return '?';
+          }
+        if (pfound != NULL)
+          {
+            option_index = indfound;
+            if (*nameend)
+              {
+                /* Don't test has_arg with >, because some C compilers don't
+                   allow it to be used on enums.  */
+                if (pfound->has_arg)
+                  d->optarg = nameend + 1;
+                else
+                  {
+                    if (print_errors)
+                      {
+#if defined _LIBC && defined USE_IN_LIBIO
+                        char *buf;
+
+                        if (__asprintf (&buf, _("\
+%s: option '-W %s' doesn't allow an argument\n"),
+                                        argv[0], pfound->name) >= 0)
+                          {
+                            _IO_flockfile (stderr);
+
+                            int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                            ((_IO_FILE *) stderr)->_flags2
+                              |= _IO_FLAGS2_NOTCANCEL;
+
+                            __fxprintf (NULL, "%s", buf);
+
+                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                            _IO_funlockfile (stderr);
+
+                            free (buf);
+                          }
+#else
+                        fprintf (stderr, _("\
+%s: option '-W %s' doesn't allow an argument\n"),
+                                 argv[0], pfound->name);
+#endif
+                      }
+
+                    d->__nextchar += strlen (d->__nextchar);
+                    return '?';
+                  }
+              }
+            else if (pfound->has_arg == 1)
+              {
+                if (d->optind < argc)
+                  d->optarg = argv[d->optind++];
+                else
+                  {
+                    if (print_errors)
+                      {
+#if defined _LIBC && defined USE_IN_LIBIO
+                        char *buf;
+
+                        if (__asprintf (&buf, _("\
+%s: option '-W %s' requires an argument\n"),
+                                        argv[0], pfound->name) >= 0)
+                          {
+                            _IO_flockfile (stderr);
+
+                            int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                            ((_IO_FILE *) stderr)->_flags2
+                              |= _IO_FLAGS2_NOTCANCEL;
+
+                            __fxprintf (NULL, "%s", buf);
+
+                            ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                            _IO_funlockfile (stderr);
+
+                            free (buf);
+                          }
+#else
+                        fprintf (stderr, _("\
+%s: option '-W %s' requires an argument\n"),
+                                 argv[0], pfound->name);
+#endif
+                      }
+                    d->__nextchar += strlen (d->__nextchar);
+                    return optstring[0] == ':' ? ':' : '?';
+                  }
+              }
+            else
+              d->optarg = NULL;
+            d->__nextchar += strlen (d->__nextchar);
+            if (longind != NULL)
+              *longind = option_index;
+            if (pfound->flag)
+              {
+                *(pfound->flag) = pfound->val;
+                return 0;
+              }
+            return pfound->val;
+          }
+          d->__nextchar = NULL;
+          return 'W';   /* Let the application handle it.   */
+      }
+    if (temp[1] == ':')
+      {
+        if (temp[2] == ':')
+          {
+            /* This is an option that accepts an argument optionally.  */
+            if (*d->__nextchar != '\0')
+              {
+                d->optarg = d->__nextchar;
+                d->optind++;
+              }
+            else
+              d->optarg = NULL;
+            d->__nextchar = NULL;
+          }
+        else
+          {
+            /* This is an option that requires an argument.  */
+            if (*d->__nextchar != '\0')
+              {
+                d->optarg = d->__nextchar;
+                /* If we end this ARGV-element by taking the rest as an arg,
+                   we must advance to the next element now.  */
+                d->optind++;
+              }
+            else if (d->optind == argc)
+              {
+                if (print_errors)
+                  {
+#if defined _LIBC && defined USE_IN_LIBIO
+                    char *buf;
+
+                    if (__asprintf (&buf, _("\
+%s: option requires an argument -- '%c'\n"),
+                                    argv[0], c) >= 0)
+                      {
+                        _IO_flockfile (stderr);
+
+                        int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
+                        ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
+
+                        __fxprintf (NULL, "%s", buf);
+
+                        ((_IO_FILE *) stderr)->_flags2 = old_flags2;
+                        _IO_funlockfile (stderr);
+
+                        free (buf);
+                      }
+#else
+                    fprintf (stderr,
+                             _("%s: option requires an argument -- '%c'\n"),
+                             argv[0], c);
+#endif
+                  }
+                d->optopt = c;
+                if (optstring[0] == ':')
+                  c = ':';
+                else
+                  c = '?';
+              }
+            else
+              /* We already incremented `optind' once;
+                 increment it again when taking next ARGV-elt as argument.  */
+              d->optarg = argv[d->optind++];
+            d->__nextchar = NULL;
+          }
+      }
+    return c;
+  }
+}
+
+int
+_getopt_internal (int argc, char **argv, const char *optstring,
+                  const struct option *longopts, int *longind, int long_only,
+                  int posixly_correct)
+{
+  int result;
+
+  getopt_data.optind = optind;
+  getopt_data.opterr = opterr;
+
+  result = _getopt_internal_r (argc, argv, optstring, longopts,
+                               longind, long_only, &getopt_data,
+                               posixly_correct);
+
+  optind = getopt_data.optind;
+  optarg = getopt_data.optarg;
+  optopt = getopt_data.optopt;
+
+  return result;
+}
+
+/* glibc gets a LSB-compliant getopt.
+   Standalone applications get a POSIX-compliant getopt.  */
+#if _LIBC
+enum { POSIXLY_CORRECT = 0 };
+#else
+enum { POSIXLY_CORRECT = 1 };
+#endif
+
+int
+getopt (int argc, char *const *argv, const char *optstring)
+{
+  return _getopt_internal (argc, (char **) argv, optstring,
+                           (const struct option *) 0,
+                           (int *) 0,
+                           0, POSIXLY_CORRECT);
+}
+
+#ifdef _LIBC
+int
+__posix_getopt (int argc, char *const *argv, const char *optstring)
+{
+  return _getopt_internal (argc, argv, optstring,
+                           (const struct option *) 0,
+                           (int *) 0,
+                           0, 1);
+}
+#endif
+
+\f
+#ifdef TEST
+
+/* Compile with -DTEST to make an executable for use in testing
+   the above definition of `getopt'.  */
+
+int
+main (int argc, char **argv)
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+
+      c = getopt (argc, argv, "abc:d:0123456789");
+      if (c == -1)
+        break;
+
+      switch (c)
+        {
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+          if (digit_optind != 0 && digit_optind != this_option_optind)
+            printf ("digits occur in two different argv-elements.\n");
+          digit_optind = this_option_optind;
+          printf ("option %c\n", c);
+          break;
+
+        case 'a':
+          printf ("option a\n");
+          break;
+
+        case 'b':
+          printf ("option b\n");
+          break;
+
+        case 'c':
+          printf ("option c with value '%s'\n", optarg);
+          break;
+
+        case '?':
+          break;
+
+        default:
+          printf ("?? getopt returned character code 0%o ??\n", c);
+        }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+        printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/gl/getopt.in.h b/gl/getopt.in.h
new file mode 100644 (file)
index 0000000..57a8e89
--- /dev/null
@@ -0,0 +1,249 @@
+/* Declarations for getopt.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2010 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+#ifndef _GL_GETOPT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  We must
+   also inform the replacement unistd.h to not recursively use
+   <getopt.h>; our definitions will be present soon enough.  */
+#if @HAVE_GETOPT_H@
+# define _GL_SYSTEM_GETOPT
+# @INCLUDE_NEXT@ @NEXT_GETOPT_H@
+# undef _GL_SYSTEM_GETOPT
+#endif
+
+#ifndef _GL_GETOPT_H
+
+#ifndef __need_getopt
+# define _GL_GETOPT_H 1
+#endif
+
+/* Standalone applications should #define __GETOPT_PREFIX to an
+   identifier that prefixes the external functions and variables
+   defined in this header.  When this happens, include the
+   headers that might declare getopt so that they will not cause
+   confusion if included after this file (if the system had <getopt.h>,
+   we have already included it).  Then systematically rename
+   identifiers so that they do not collide with the system functions
+   and variables.  Renaming avoids problems with some compilers and
+   linkers.  */
+#if defined __GETOPT_PREFIX && !defined __need_getopt
+# if !@HAVE_GETOPT_H@
+#  include <stdlib.h>
+#  include <stdio.h>
+#  include <unistd.h>
+# endif
+# undef __need_getopt
+# undef getopt
+# undef getopt_long
+# undef getopt_long_only
+# undef optarg
+# undef opterr
+# undef optind
+# undef optopt
+# undef option
+# define __GETOPT_CONCAT(x, y) x ## y
+# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y)
+# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y)
+# define getopt __GETOPT_ID (getopt)
+# define getopt_long __GETOPT_ID (getopt_long)
+# define getopt_long_only __GETOPT_ID (getopt_long_only)
+# define optarg __GETOPT_ID (optarg)
+# define opterr __GETOPT_ID (opterr)
+# define optind __GETOPT_ID (optind)
+# define optopt __GETOPT_ID (optopt)
+# define option __GETOPT_ID (option)
+# define _getopt_internal __GETOPT_ID (getopt_internal)
+#endif
+
+/* Standalone applications get correct prototypes for getopt_long and
+   getopt_long_only; they declare "char **argv".  libc uses prototypes
+   with "char *const *argv" that are incorrect because getopt_long and
+   getopt_long_only can permute argv; this is required for backward
+   compatibility (e.g., for LSB 2.0.1).
+
+   This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
+   but it caused redefinition warnings if both unistd.h and getopt.h were
+   included, since unistd.h includes getopt.h having previously defined
+   __need_getopt.
+
+   The only place where __getopt_argv_const is used is in definitions
+   of getopt_long and getopt_long_only below, but these are visible
+   only if __need_getopt is not defined, so it is quite safe to rewrite
+   the conditional as follows:
+*/
+#if !defined __need_getopt
+# if defined __GETOPT_PREFIX
+#  define __getopt_argv_const /* empty */
+# else
+#  define __getopt_argv_const const
+# endif
+#endif
+
+/* If __GNU_LIBRARY__ is not already defined, either we are being used
+   standalone, or this is the first header included in the source file.
+   If we are being used with glibc, we need to include <features.h>, but
+   that does not exist if we are standalone.  So: if __GNU_LIBRARY__ is
+   not defined, include <ctype.h>, which will pull in <features.h> for us
+   if it's from glibc.  (Why ctype.h?  It's guaranteed to exist and it
+   doesn't flood the namespace with stuff the way some other headers do.)  */
+#if !defined __GNU_LIBRARY__
+# include <ctype.h>
+#endif
+
+#ifndef __THROW
+# ifndef __GNUC_PREREQ
+#  define __GNUC_PREREQ(maj, min) (0)
+# endif
+# if defined __cplusplus && __GNUC_PREREQ (2,8)
+#  define __THROW       throw ()
+# else
+#  define __THROW
+# endif
+#endif
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* For communication from `getopt' to the caller.
+   When `getopt' finds an option that takes an argument,
+   the argument value is returned here.
+   Also, when `ordering' is RETURN_IN_ORDER,
+   each non-option ARGV-element is returned here.  */
+
+extern char *optarg;
+
+/* Index in ARGV of the next element to be scanned.
+   This is used for communication to and from the caller
+   and for communication between successive calls to `getopt'.
+
+   On entry to `getopt', zero means this is the first call; initialize.
+
+   When `getopt' returns -1, this is the index of the first of the
+   non-option elements that the caller should itself scan.
+
+   Otherwise, `optind' communicates from one call to the next
+   how much of ARGV has been scanned so far.  */
+
+extern int optind;
+
+/* Callers store zero here to inhibit the error message `getopt' prints
+   for unrecognized options.  */
+
+extern int opterr;
+
+/* Set to an option character which was unrecognized.  */
+
+extern int optopt;
+
+#ifndef __need_getopt
+/* Describe the long-named options requested by the application.
+   The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
+   of `struct option' terminated by an element containing a name which is
+   zero.
+
+   The field `has_arg' is:
+   no_argument          (or 0) if the option does not take an argument,
+   required_argument    (or 1) if the option requires an argument,
+   optional_argument    (or 2) if the option takes an optional argument.
+
+   If the field `flag' is not NULL, it points to a variable that is set
+   to the value given in the field `val' when the option is found, but
+   left unchanged if the option is not found.
+
+   To have a long-named option do something other than set an `int' to
+   a compiled-in constant, such as set a value from `optarg', set the
+   option's `flag' field to zero and its `val' field to a nonzero
+   value (the equivalent single-letter option character, if there is
+   one).  For long options that have a zero `flag' field, `getopt'
+   returns the contents of the `val' field.  */
+
+struct option
+{
+  const char *name;
+  /* has_arg can't be an enum because some compilers complain about
+     type mismatches in all the code that assumes it is an int.  */
+  int has_arg;
+  int *flag;
+  int val;
+};
+
+/* Names for the values of the `has_arg' field of `struct option'.  */
+
+# define no_argument            0
+# define required_argument      1
+# define optional_argument      2
+#endif  /* need getopt */
+
+
+/* Get definitions and prototypes for functions to process the
+   arguments in ARGV (ARGC of them, minus the program name) for
+   options given in OPTS.
+
+   Return the option character from OPTS just read.  Return -1 when
+   there are no more options.  For unrecognized options, or options
+   missing arguments, `optopt' is set to the option letter, and '?' is
+   returned.
+
+   The OPTS string is a list of characters which are recognized option
+   letters, optionally followed by colons, specifying that that letter
+   takes an argument, to be placed in `optarg'.
+
+   If a letter in OPTS is followed by two colons, its argument is
+   optional.  This behavior is specific to the GNU `getopt'.
+
+   The argument `--' causes premature termination of argument
+   scanning, explicitly telling `getopt' that there are no more
+   options.
+
+   If OPTS begins with `-', then non-option arguments are treated as
+   arguments to the option '\1'.  This behavior is specific to the GNU
+   `getopt'.  If OPTS begins with `+', or POSIXLY_CORRECT is set in
+   the environment, then do not permute arguments.  */
+
+extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#ifndef __need_getopt
+extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv,
+                        const char *__shortopts,
+                        const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind)
+       __THROW _GL_ARG_NONNULL ((2, 3));
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* Make sure we later can get all the definitions and declarations.  */
+#undef __need_getopt
+
+#endif /* getopt.h */
+#endif /* getopt.h */
diff --git a/gl/getopt1.c b/gl/getopt1.c
new file mode 100644 (file)
index 0000000..046d69f
--- /dev/null
@@ -0,0 +1,170 @@
+/* getopt_long and getopt_long_only entry points for GNU getopt.
+   Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
+   1998, 2004, 2006, 2009, 2010 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+\f
+#ifdef _LIBC
+# include <getopt.h>
+#else
+# include <config.h>
+# include "getopt.h"
+#endif
+#include "getopt_int.h"
+
+#include <stdio.h>
+
+/* This needs to come after some library #include
+   to get __GNU_LIBRARY__ defined.  */
+#ifdef __GNU_LIBRARY__
+#include <stdlib.h>
+#endif
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+int
+getopt_long (int argc, char *__getopt_argv_const *argv, const char *options,
+             const struct option *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, (char **) argv, options, long_options,
+                           opt_index, 0, 0);
+}
+
+int
+_getopt_long_r (int argc, char **argv, const char *options,
+                const struct option *long_options, int *opt_index,
+                struct _getopt_data *d)
+{
+  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+                             0, d, 0);
+}
+
+/* Like getopt_long, but '-' as well as '--' can indicate a long option.
+   If an option that starts with '-' (not '--') doesn't match a long option,
+   but does match a short option, it is parsed as a short option
+   instead.  */
+
+int
+getopt_long_only (int argc, char *__getopt_argv_const *argv,
+                  const char *options,
+                  const struct option *long_options, int *opt_index)
+{
+  return _getopt_internal (argc, (char **) argv, options, long_options,
+                           opt_index, 1, 0);
+}
+
+int
+_getopt_long_only_r (int argc, char **argv, const char *options,
+                     const struct option *long_options, int *opt_index,
+                     struct _getopt_data *d)
+{
+  return _getopt_internal_r (argc, argv, options, long_options, opt_index,
+                             1, d, 0);
+}
+
+\f
+#ifdef TEST
+
+#include <stdio.h>
+
+int
+main (int argc, char **argv)
+{
+  int c;
+  int digit_optind = 0;
+
+  while (1)
+    {
+      int this_option_optind = optind ? optind : 1;
+      int option_index = 0;
+      static const struct option long_options[] =
+      {
+        {"add", 1, 0, 0},
+        {"append", 0, 0, 0},
+        {"delete", 1, 0, 0},
+        {"verbose", 0, 0, 0},
+        {"create", 0, 0, 0},
+        {"file", 1, 0, 0},
+        {0, 0, 0, 0}
+      };
+
+      c = getopt_long (argc, argv, "abc:d:0123456789",
+                       long_options, &option_index);
+      if (c == -1)
+        break;
+
+      switch (c)
+        {
+        case 0:
+          printf ("option %s", long_options[option_index].name);
+          if (optarg)
+            printf (" with arg %s", optarg);
+          printf ("\n");
+          break;
+
+        case '0':
+        case '1':
+        case '2':
+        case '3':
+        case '4':
+        case '5':
+        case '6':
+        case '7':
+        case '8':
+        case '9':
+          if (digit_optind != 0 && digit_optind != this_option_optind)
+            printf ("digits occur in two different argv-elements.\n");
+          digit_optind = this_option_optind;
+          printf ("option %c\n", c);
+          break;
+
+        case 'a':
+          printf ("option a\n");
+          break;
+
+        case 'b':
+          printf ("option b\n");
+          break;
+
+        case 'c':
+          printf ("option c with value `%s'\n", optarg);
+          break;
+
+        case 'd':
+          printf ("option d with value `%s'\n", optarg);
+          break;
+
+        case '?':
+          break;
+
+        default:
+          printf ("?? getopt returned character code 0%o ??\n", c);
+        }
+    }
+
+  if (optind < argc)
+    {
+      printf ("non-option ARGV-elements: ");
+      while (optind < argc)
+        printf ("%s ", argv[optind++]);
+      printf ("\n");
+    }
+
+  exit (0);
+}
+
+#endif /* TEST */
diff --git a/gl/getopt_int.h b/gl/getopt_int.h
new file mode 100644 (file)
index 0000000..980b750
--- /dev/null
@@ -0,0 +1,135 @@
+/* Internal declarations for getopt.
+   Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2010 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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/>.  */
+
+#ifndef _GETOPT_INT_H
+#define _GETOPT_INT_H   1
+
+#include <getopt.h>
+
+extern int _getopt_internal (int ___argc, char **___argv,
+                             const char *__shortopts,
+                             const struct option *__longopts, int *__longind,
+                             int __long_only, int __posixly_correct);
+
+\f
+/* Reentrant versions which can handle parsing multiple argument
+   vectors at the same time.  */
+
+/* Describe how to deal with options that follow non-option ARGV-elements.
+
+   If the caller did not specify anything,
+   the default is REQUIRE_ORDER if the environment variable
+   POSIXLY_CORRECT is defined, PERMUTE otherwise.
+
+   REQUIRE_ORDER means don't recognize them as options;
+   stop option processing when the first non-option is seen.
+   This is what Unix does.
+   This mode of operation is selected by either setting the environment
+   variable POSIXLY_CORRECT, or using `+' as the first character
+   of the list of option characters, or by calling getopt.
+
+   PERMUTE is the default.  We permute the contents of ARGV as we
+   scan, so that eventually all the non-options are at the end.
+   This allows options to be given in any order, even with programs
+   that were not written to expect this.
+
+   RETURN_IN_ORDER is an option available to programs that were
+   written to expect options and other ARGV-elements in any order
+   and that care about the ordering of the two.  We describe each
+   non-option ARGV-element as if it were the argument of an option
+   with character code 1.  Using `-' as the first character of the
+   list of option characters selects this mode of operation.
+
+   The special argument `--' forces an end of option-scanning regardless
+   of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
+   `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
+
+enum __ord
+  {
+    REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+  };
+
+/* Data type for reentrant functions.  */
+struct _getopt_data
+{
+  /* These have exactly the same meaning as the corresponding global
+     variables, except that they are used for the reentrant
+     versions of getopt.  */
+  int optind;
+  int opterr;
+  int optopt;
+  char *optarg;
+
+  /* Internal members.  */
+
+  /* True if the internal members have been initialized.  */
+  int __initialized;
+
+  /* The next char to be scanned in the option-element
+     in which the last option character we returned was found.
+     This allows us to pick up the scan where we left off.
+
+     If this is zero, or a null string, it means resume the scan
+     by advancing to the next ARGV-element.  */
+  char *__nextchar;
+
+  /* See __ord above.  */
+  enum __ord __ordering;
+
+  /* If the POSIXLY_CORRECT environment variable is set
+     or getopt was called.  */
+  int __posixly_correct;
+
+
+  /* Handle permutation of arguments.  */
+
+  /* Describe the part of ARGV that contains non-options that have
+     been skipped.  `first_nonopt' is the index in ARGV of the first
+     of them; `last_nonopt' is the index after the last of them.  */
+
+  int __first_nonopt;
+  int __last_nonopt;
+
+#if defined _LIBC && defined USE_NONOPTION_FLAGS
+  int __nonoption_flags_max_len;
+  int __nonoption_flags_len;
+# endif
+};
+
+/* The initializer is necessary to set OPTIND and OPTERR to their
+   default values and to clear the initialization flag.  */
+#define _GETOPT_DATA_INITIALIZER        { 1, 1 }
+
+extern int _getopt_internal_r (int ___argc, char **___argv,
+                               const char *__shortopts,
+                               const struct option *__longopts, int *__longind,
+                               int __long_only, struct _getopt_data *__data,
+                               int __posixly_correct);
+
+extern int _getopt_long_r (int ___argc, char **___argv,
+                           const char *__shortopts,
+                           const struct option *__longopts, int *__longind,
+                           struct _getopt_data *__data);
+
+extern int _getopt_long_only_r (int ___argc, char **___argv,
+                                const char *__shortopts,
+                                const struct option *__longopts,
+                                int *__longind,
+                                struct _getopt_data *__data);
+
+#endif /* getopt_int.h */
diff --git a/gl/gettext.h b/gl/gettext.h
new file mode 100644 (file)
index 0000000..881ae33
--- /dev/null
@@ -0,0 +1,280 @@
+/* Convenience header for conditional use of GNU <libintl.h>.
+   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2010 Free Software
+   Foundation, Inc.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _LIBGETTEXT_H
+#define _LIBGETTEXT_H 1
+
+/* NLS can be disabled through the configure --disable-nls option.  */
+#if ENABLE_NLS
+
+/* Get declarations of GNU message catalog functions.  */
+# include <libintl.h>
+
+/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by
+   the gettext() and ngettext() macros.  This is an alternative to calling
+   textdomain(), and is useful for libraries.  */
+# ifdef DEFAULT_TEXT_DOMAIN
+#  undef gettext
+#  define gettext(Msgid) \
+     dgettext (DEFAULT_TEXT_DOMAIN, Msgid)
+#  undef ngettext
+#  define ngettext(Msgid1, Msgid2, N) \
+     dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N)
+# endif
+
+#else
+
+/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which
+   chokes if dcgettext is defined as a macro.  So include it now, to make
+   later inclusions of <locale.h> a NOP.  We don't include <libintl.h>
+   as well because people using "gettext.h" will not include <libintl.h>,
+   and also including <libintl.h> would fail on SunOS 4, whereas <locale.h>
+   is OK.  */
+#if defined(__sun)
+# include <locale.h>
+#endif
+
+/* Many header files from the libstdc++ coming with g++ 3.3 or newer include
+   <libintl.h>, which chokes if dcgettext is defined as a macro.  So include
+   it now, to make later inclusions of <libintl.h> a NOP.  */
+#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3)
+# include <cstdlib>
+# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H
+#  include <libintl.h>
+# endif
+#endif
+
+/* Disabled NLS.
+   The casts to 'const char *' serve the purpose of producing warnings
+   for invalid uses of the value returned from these functions.
+   On pre-ANSI systems without 'const', the config.h file is supposed to
+   contain "#define const".  */
+# undef gettext
+# define gettext(Msgid) ((const char *) (Msgid))
+# undef dgettext
+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
+# undef dcgettext
+# define dcgettext(Domainname, Msgid, Category) \
+    ((void) (Category), dgettext (Domainname, Msgid))
+# undef ngettext
+# define ngettext(Msgid1, Msgid2, N) \
+    ((N) == 1 \
+     ? ((void) (Msgid2), (const char *) (Msgid1)) \
+     : ((void) (Msgid1), (const char *) (Msgid2)))
+# undef dngettext
+# define dngettext(Domainname, Msgid1, Msgid2, N) \
+    ((void) (Domainname), ngettext (Msgid1, Msgid2, N))
+# undef dcngettext
+# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
+    ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N))
+# undef textdomain
+# define textdomain(Domainname) ((const char *) (Domainname))
+# undef bindtextdomain
+# define bindtextdomain(Domainname, Dirname) \
+    ((void) (Domainname), (const char *) (Dirname))
+# undef bind_textdomain_codeset
+# define bind_textdomain_codeset(Domainname, Codeset) \
+    ((void) (Domainname), (const char *) (Codeset))
+
+#endif
+
+/* A pseudo function call that serves as a marker for the automated
+   extraction of messages, but does not call gettext().  The run-time
+   translation is done at a different place in the code.
+   The argument, String, should be a literal string.  Concatenated strings
+   and other string expressions won't work.
+   The macro's expansion is not parenthesized, so that it is suitable as
+   initializer for static 'char[]' or 'const char[]' variables.  */
+#define gettext_noop(String) String
+
+/* The separator between msgctxt and msgid in a .mo file.  */
+#define GETTEXT_CONTEXT_GLUE "\004"
+
+/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a
+   MSGID.  MSGCTXT and MSGID must be string literals.  MSGCTXT should be
+   short and rarely need to change.
+   The letter 'p' stands for 'particular' or 'special'.  */
+#ifdef DEFAULT_TEXT_DOMAIN
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#else
+# define pgettext(Msgctxt, Msgid) \
+   pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#endif
+#define dpgettext(Domainname, Msgctxt, Msgid) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES)
+#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \
+  pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category)
+#ifdef DEFAULT_TEXT_DOMAIN
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#else
+# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \
+   npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#endif
+#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \
+  npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+pgettext_aux (const char *domain,
+              const char *msg_ctxt_id, const char *msgid,
+              int category)
+{
+  const char *translation = dcgettext (domain, msg_ctxt_id, category);
+  if (translation == msg_ctxt_id)
+    return msgid;
+  else
+    return translation;
+}
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+npgettext_aux (const char *domain,
+               const char *msg_ctxt_id, const char *msgid,
+               const char *msgid_plural, unsigned long int n,
+               int category)
+{
+  const char *translation =
+    dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+  if (translation == msg_ctxt_id || translation == msgid_plural)
+    return (n == 1 ? msgid : msgid_plural);
+  else
+    return translation;
+}
+
+/* The same thing extended for non-constant arguments.  Here MSGCTXT and MSGID
+   can be arbitrary expressions.  But for string literals these macros are
+   less efficient than those above.  */
+
+#include <string.h>
+
+#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \
+  (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \
+   /* || __STDC_VERSION__ >= 199901L */ )
+
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+#include <stdlib.h>
+#endif
+
+#define pgettext_expr(Msgctxt, Msgid) \
+  dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES)
+#define dpgettext_expr(Domainname, Msgctxt, Msgid) \
+  dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcpgettext_expr (const char *domain,
+                 const char *msgctxt, const char *msgid,
+                 int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcgettext (domain, msg_ctxt_id, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+        free (msg_ctxt_id);
+#endif
+      if (translation != msg_ctxt_id)
+        return translation;
+    }
+  return msgid;
+}
+
+#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \
+  dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES)
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static const char *
+dcnpgettext_expr (const char *domain,
+                  const char *msgctxt, const char *msgid,
+                  const char *msgid_plural, unsigned long int n,
+                  int category)
+{
+  size_t msgctxt_len = strlen (msgctxt) + 1;
+  size_t msgid_len = strlen (msgid) + 1;
+  const char *translation;
+#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+  char msg_ctxt_id[msgctxt_len + msgid_len];
+#else
+  char buf[1024];
+  char *msg_ctxt_id =
+    (msgctxt_len + msgid_len <= sizeof (buf)
+     ? buf
+     : (char *) malloc (msgctxt_len + msgid_len));
+  if (msg_ctxt_id != NULL)
+#endif
+    {
+      memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1);
+      msg_ctxt_id[msgctxt_len - 1] = '\004';
+      memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len);
+      translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category);
+#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS
+      if (msg_ctxt_id != buf)
+        free (msg_ctxt_id);
+#endif
+      if (!(translation == msg_ctxt_id || translation == msgid_plural))
+        return translation;
+    }
+  return (n == 1 ? msgid : msgid_plural);
+}
+
+#endif /* _LIBGETTEXT_H */
diff --git a/gl/m4/00gnulib.m4 b/gl/m4/00gnulib.m4
new file mode 100644 (file)
index 0000000..301469b
--- /dev/null
@@ -0,0 +1,30 @@
+# 00gnulib.m4 serial 2
+dnl Copyright (C) 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This file must be named something that sorts before all other
+dnl gnulib-provided .m4 files.  It is needed until such time as we can
+dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics.
+
+# AC_DEFUN_ONCE([NAME], VALUE)
+# ----------------------------
+# Define NAME to expand to VALUE on the first use (whether by direct
+# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
+# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
+# definition is slower than the version in Autoconf 2.64, because it
+# can only use interfaces that existed since 2.59; but it achieves the
+# same effect.  Quoting is necessary to avoid confusing Automake.
+m4_version_prereq([2.63.263], [],
+[m4_define([AC][_DEFUN_ONCE],
+  [AC][_DEFUN([$1],
+    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
+      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
+[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
+
+# gl_00GNULIB
+# -----------
+# Witness macro that this file has been included.  Needed to force
+# Automake to include this file prior to all other gnulib .m4 files.
+AC_DEFUN([gl_00GNULIB])
diff --git a/gl/m4/autobuild.m4 b/gl/m4/autobuild.m4
new file mode 100644 (file)
index 0000000..93ccb54
--- /dev/null
@@ -0,0 +1,40 @@
+# autobuild.m4 serial 7
+dnl Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# Usage: AB_INIT([MODE]).
+AC_DEFUN([AB_INIT],
+[
+  AC_REQUIRE([AC_CANONICAL_BUILD])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  if test -z "$AB_PACKAGE"; then
+    AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE}
+  fi
+  AC_MSG_NOTICE([autobuild project... $AB_PACKAGE])
+
+  if test -z "$AB_VERSION"; then
+    AB_VERSION=${PACKAGE_VERSION:-$VERSION}
+  fi
+  AC_MSG_NOTICE([autobuild revision... $AB_VERSION])
+
+  hostname=`hostname`
+  if test "$hostname"; then
+    AC_MSG_NOTICE([autobuild hostname... $hostname])
+  fi
+
+  ifelse([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])])
+
+  date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ`
+  if test "$?" != 0; then
+    date=`date`
+  fi
+  if test "$date"; then
+    AC_MSG_NOTICE([autobuild timestamp... $date])
+  fi
+])
diff --git a/gl/m4/extensions.m4 b/gl/m4/extensions.m4
new file mode 100644 (file)
index 0000000..7d9458a
--- /dev/null
@@ -0,0 +1,118 @@
+# serial 9  -*- Autoconf -*-
+# Enable extensions on systems that normally disable them.
+
+# Copyright (C) 2003, 2006-2010 Free Software Foundation, Inc.
+# This file 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 definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS
+# Autoconf.  Perhaps we can remove this once we can assume Autoconf
+# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly
+# enough in this area it's likely we'll need to redefine
+# AC_USE_SYSTEM_EXTENSIONS for quite some time.
+
+# If autoconf reports a warning
+#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# the fix is
+#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
+#      but always AC_REQUIREd,
+#   2) to ensure that for each occurrence of
+#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+#      or
+#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+#      the corresponding gnulib module description has 'extensions' among
+#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
+#      invocation occurs in gl_EARLY, not in gl_INIT.
+
+# AC_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+# Remember that #undef in AH_VERBATIM gets replaced with #define by
+# AC_DEFINE.  The goal here is to define all known feature-enabling
+# macros, then, if reports of conflicts are made, disable macros that
+# cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
+[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
+  if test "$MINIX" = yes; then
+    AC_DEFINE([_POSIX_SOURCE], [1],
+      [Define to 1 if you need to in order for `stat' and other
+       things to work.])
+    AC_DEFINE([_POSIX_1_SOURCE], [2],
+      [Define to 2 if the system does not provide POSIX.1 features
+       except with this defined.])
+    AC_DEFINE([_MINIX], [1],
+      [Define to 1 if on MINIX.])
+  fi
+
+  dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500,
+  dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already
+  dnl provided.
+  case "$host_os" in
+    hpux*)
+      AC_DEFINE([_XOPEN_SOURCE], [500],
+        [Define to 500 only on HP-UX.])
+      ;;
+  esac
+
+  AH_VERBATIM([__EXTENSIONS__],
+[/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+])
+  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+    [ac_cv_safe_to_define___extensions__],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+#         define __EXTENSIONS__ 1
+          ]AC_INCLUDES_DEFAULT])],
+       [ac_cv_safe_to_define___extensions__=yes],
+       [ac_cv_safe_to_define___extensions__=no])])
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    AC_DEFINE([__EXTENSIONS__])
+  AC_DEFINE([_ALL_SOURCE])
+  AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+  AC_DEFINE([_TANDEM_SOURCE])
+])# AC_USE_SYSTEM_EXTENSIONS
+
+# gl_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
+[
+  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
+  dnl gnulib does not need it. But if it gets required by third-party macros
+  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
+  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
+  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
+  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
+  AC_REQUIRE([AC_GNU_SOURCE])
+
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
diff --git a/gl/m4/getopt.m4 b/gl/m4/getopt.m4
new file mode 100644 (file)
index 0000000..5b211e5
--- /dev/null
@@ -0,0 +1,306 @@
+# getopt.m4 serial 28
+dnl Copyright (C) 2002-2006, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Request a POSIX compliant getopt function.
+AC_DEFUN([gl_FUNC_GETOPT_POSIX],
+[
+  m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  gl_GETOPT_IFELSE([
+    gl_REPLACE_GETOPT
+  ],
+  [])
+])
+
+# Request a POSIX compliant getopt function with GNU extensions (such as
+# options with optional arguments) and the functions getopt_long,
+# getopt_long_only.
+AC_DEFUN([gl_FUNC_GETOPT_GNU],
+[
+  m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
+
+  AC_REQUIRE([gl_FUNC_GETOPT_POSIX])
+])
+
+# Request the gnulib implementation of the getopt functions unconditionally.
+# argp.m4 uses this.
+AC_DEFUN([gl_REPLACE_GETOPT],
+[
+  dnl Arrange for getopt.h to be created.
+  gl_GETOPT_SUBSTITUTE_HEADER
+  dnl Arrange for unistd.h to include getopt.h.
+  GNULIB_UNISTD_H_GETOPT=1
+  dnl Arrange to compile the getopt implementation.
+  AC_LIBOBJ([getopt])
+  AC_LIBOBJ([getopt1])
+  gl_PREREQ_GETOPT
+])
+
+# emacs' configure.in uses this.
+AC_DEFUN([gl_GETOPT_IFELSE],
+[
+  AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
+  AS_IF([test -n "$gl_replace_getopt"], [$1], [$2])
+])
+
+# Determine whether to replace the entire getopt facility.
+AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt.
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  gl_CHECK_NEXT_HEADERS([getopt.h])
+  AC_CHECK_HEADERS_ONCE([getopt.h])
+  if test $ac_cv_header_getopt_h = yes; then
+    HAVE_GETOPT_H=1
+  else
+    HAVE_GETOPT_H=0
+  fi
+  AC_SUBST([HAVE_GETOPT_H])
+
+  gl_replace_getopt=
+
+  dnl Test whether <getopt.h> is available.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
+  fi
+
+  dnl Test whether the function getopt_long is available.
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
+  fi
+
+  dnl BSD getopt_long uses an incompatible method to reset option processing.
+  dnl Existence of the variable, in and of itself, is not a reason to replace
+  dnl getopt, but knowledge of the variable is needed to determine how to
+  dnl reset and whether a reset reparses the environment.
+  dnl Solaris supports neither optreset nor optind=0, but keeps no state that
+  dnl needs a reset beyond setting optind=1; detect Solaris by getopt_clip.
+  if test -z "$gl_replace_getopt"; then
+    AC_CHECK_DECLS([optreset], [],
+      [AC_CHECK_DECLS([getopt_clip], [], [],
+        [[#include <getopt.h>]])
+      ],
+      [[#include <getopt.h>]])
+  fi
+
+  dnl mingw's getopt (in libmingwex.a) does weird things when the options
+  dnl strings starts with '+' and it's not the first call.  Some internal state
+  dnl is left over from earlier calls, and neither setting optind = 0 nor
+  dnl setting optreset = 1 get rid of this internal state.
+  dnl POSIX is silent on optind vs. optreset, so we allow either behavior.
+  dnl POSIX 2008 does not specify leading '+' behavior, but see
+  dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
+  dnl the next version of POSIX.  For now, we only guarantee leading '+'
+  dnl behavior with getopt-gnu.
+  if test -z "$gl_replace_getopt"; then
+    AC_CACHE_CHECK([whether getopt is POSIX compatible],
+      [gl_cv_func_getopt_posix],
+      [
+        dnl This test fails on mingw and succeeds on all other platforms.
+        AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !HAVE_DECL_OPTRESET && !HAVE_DECL_GETOPT_CLIP
+# define OPTIND_MIN 0
+#else
+# define OPTIND_MIN 1
+#endif
+
+int
+main ()
+{
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "-a";
+    argv[argc++] = "foo";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "ab");
+    if (!(c == 'a'))
+      return 1;
+    c = getopt (argc, argv, "ab");
+    if (!(c == -1))
+      return 2;
+    if (!(optind == 2))
+      return 3;
+  }
+  /* Some internal state exists at this point.  */
+  {
+    int argc = 0;
+    char *argv[10];
+    int c;
+
+    argv[argc++] = "program";
+    argv[argc++] = "donald";
+    argv[argc++] = "-p";
+    argv[argc++] = "billy";
+    argv[argc++] = "duck";
+    argv[argc++] = "-a";
+    argv[argc++] = "bar";
+    argv[argc] = NULL;
+    optind = OPTIND_MIN;
+    opterr = 0;
+
+    c = getopt (argc, argv, "+abp:q:");
+    if (!(c == -1))
+      return 4;
+    if (!(strcmp (argv[0], "program") == 0))
+      return 5;
+    if (!(strcmp (argv[1], "donald") == 0))
+      return 6;
+    if (!(strcmp (argv[2], "-p") == 0))
+      return 7;
+    if (!(strcmp (argv[3], "billy") == 0))
+      return 8;
+    if (!(strcmp (argv[4], "duck") == 0))
+      return 9;
+    if (!(strcmp (argv[5], "-a") == 0))
+      return 10;
+    if (!(strcmp (argv[6], "bar") == 0))
+      return 11;
+    if (!(optind == 1))
+      return 12;
+  }
+  /* Detect MacOS 10.5 bug.  */
+  {
+    char *argv[3] = { "program", "-ab", NULL };
+    optind = OPTIND_MIN;
+    opterr = 0;
+    if (getopt (2, argv, "ab:") != 'a')
+      return 13;
+    if (getopt (2, argv, "ab:") != '?')
+      return 14;
+    if (optopt != 'b')
+      return 15;
+    if (optind != 2)
+      return 16;
+  }
+
+  return 0;
+}
+]])],
+          [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no],
+          [case "$host_os" in
+             mingw*) gl_cv_func_getopt_posix="guessing no";;
+             darwin*) gl_cv_func_getopt_posix="guessing no";;
+             *)      gl_cv_func_getopt_posix="guessing yes";;
+           esac
+          ])
+      ])
+    case "$gl_cv_func_getopt_posix" in
+      *no) gl_replace_getopt=yes ;;
+    esac
+  fi
+
+  if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
+    AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu],
+      [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
+       # optstring is necessary for programs like m4 that have POSIX-mandated
+       # semantics for supporting options interspersed with files.
+       # Also, since getopt_long is a GNU extension, we require optind=0.
+       gl_had_POSIXLY_CORRECT=${POSIXLY_CORRECT:+yes}
+       POSIXLY_CORRECT=1
+       export POSIXLY_CORRECT
+       AC_RUN_IFELSE(
+        [AC_LANG_PROGRAM([[#include <getopt.h>
+                           #include <stddef.h>
+                           #include <string.h>
+           ]], [[
+             /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
+                and fails on MacOS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
+                OSF/1 5.1, Solaris 10.  */
+             {
+               char *myargv[3];
+               myargv[0] = "conftest";
+               myargv[1] = "-+";
+               myargv[2] = 0;
+               opterr = 0;
+               if (getopt (2, myargv, "+a") != '?')
+                 return 1;
+             }
+             /* This code succeeds on glibc 2.8, mingw,
+                and fails on MacOS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
+                IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x.  */
+             {
+               char *argv[] = { "program", "-p", "foo", "bar", NULL };
+
+               optind = 1;
+               if (getopt (4, argv, "p::") != 'p')
+                 return 2;
+               if (optarg != NULL)
+                 return 3;
+               if (getopt (4, argv, "p::") != -1)
+                 return 4;
+               if (optind != 2)
+                 return 5;
+             }
+             /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0.  */
+             {
+               char *argv[] = { "program", "foo", "-p", NULL };
+               optind = 0;
+               if (getopt (3, argv, "-p") != 1)
+                 return 6;
+               if (getopt (3, argv, "-p") != 'p')
+                 return 7;
+             }
+             /* This code fails on glibc 2.11.  */
+             {
+               char *argv[] = { "program", "-b", "-a", NULL };
+               optind = opterr = 0;
+               if (getopt (3, argv, "+:a:b") != 'b')
+                 return 8;
+               if (getopt (3, argv, "+:a:b") != ':')
+                 return 9;
+             }
+             return 0;
+           ]])],
+        [gl_cv_func_getopt_gnu=yes],
+        [gl_cv_func_getopt_gnu=no],
+        [dnl Cross compiling. Guess based on host and declarations.
+         case $host_os:$ac_cv_have_decl_optreset in
+           *-gnu*:* | mingw*:*) gl_cv_func_getopt_gnu=no;;
+           *:yes)               gl_cv_func_getopt_gnu=no;;
+           *)                   gl_cv_func_getopt_gnu=yes;;
+         esac
+        ])
+       if test "$gl_had_POSIXLY_CORRECT" != yes; then
+         AS_UNSET([POSIXLY_CORRECT])
+       fi
+      ])
+    if test "$gl_cv_func_getopt_gnu" = "no"; then
+      gl_replace_getopt=yes
+    fi
+  fi
+])
+
+# emacs' configure.in uses this.
+AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
+[
+  GETOPT_H=getopt.h
+  AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
+    [Define to rpl_ if the getopt replacement functions and variables
+     should be used.])
+  AC_SUBST([GETOPT_H])
+])
+
+# Prerequisites of lib/getopt*.
+# emacs' configure.in uses this.
+AC_DEFUN([gl_PREREQ_GETOPT],
+[
+  AC_CHECK_DECLS_ONCE([getenv])
+])
diff --git a/gl/m4/gnulib-cache.m4 b/gl/m4/gnulib-cache.m4
new file mode 100644 (file)
index 0000000..b52050d
--- /dev/null
@@ -0,0 +1,49 @@
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the specification of how gnulib-tool is used.
+# It acts as a cache: It is written and read by gnulib-tool.
+# In projects using CVS, this file is meant to be stored in CVS,
+# like the configure.ac and various Makefile.am files.
+
+
+# Specification in the form of a command-line invocation:
+#   gnulib-tool --import --dir=. --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs getopt-gnu maintainer-makefile manywarnings pmccabe2html progname read-file stdint update-copyright valgrind-tests version-etc-fsf warnings
+
+# Specification in the form of a few gnulib-tool.m4 macro invocations:
+gl_LOCAL_DIR([gl/override])
+gl_MODULES([
+  autobuild
+  fdl-1.3
+  gendocs
+  getopt-gnu
+  maintainer-makefile
+  manywarnings
+  pmccabe2html
+  progname
+  read-file
+  stdint
+  update-copyright
+  valgrind-tests
+  version-etc-fsf
+  warnings
+])
+gl_AVOID([])
+gl_SOURCE_BASE([gl])
+gl_M4_BASE([gl/m4])
+gl_PO_BASE([])
+gl_DOC_BASE([doc])
+gl_TESTS_BASE([tests])
+gl_LIB([libgnu])
+gl_MAKEFILE_NAME([])
+gl_LIBTOOL
+gl_MACRO_PREFIX([gl])
+gl_PO_DOMAIN([])
+gl_VC_FILES([false])
diff --git a/gl/m4/gnulib-common.m4 b/gl/m4/gnulib-common.m4
new file mode 100644 (file)
index 0000000..4c7ac30
--- /dev/null
@@ -0,0 +1,201 @@
+# gnulib-common.m4 serial 20
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_COMMON
+# is expanded unconditionally through gnulib-tool magic.
+AC_DEFUN([gl_COMMON], [
+  dnl Use AC_REQUIRE here, so that the code is expanded once only.
+  AC_REQUIRE([gl_00GNULIB])
+  AC_REQUIRE([gl_COMMON_BODY])
+])
+AC_DEFUN([gl_COMMON_BODY], [
+  AH_VERBATIM([isoc99_inline],
+[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for MacOS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif])
+  AH_VERBATIM([unused_parameter],
+[/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+])
+  dnl Preparation for running test programs:
+  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
+  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
+  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
+  LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+])
+
+# gl_MODULE_INDICATOR_CONDITION
+# expands to a C preprocessor expression that evaluates to 1 or 0, depending
+# whether a gnulib module that has been requested shall be considered present
+# or not.
+AC_DEFUN([gl_MODULE_INDICATOR_CONDITION], [1])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
+# sets the shell variable that indicates the presence of the given module to
+# a C preprocessor expression that will evaluate to 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
+[
+  GNULIB_[]m4_translit([[$1]],
+    [abcdefghijklmnopqrstuvwxyz./-],
+    [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=gl_MODULE_INDICATOR_CONDITION
+])
+
+# gl_MODULE_INDICATOR([modulename])
+# defines a C macro indicating the presence of the given module
+# in a location where it can be used.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    0    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR],
+[
+  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
+    [gl_MODULE_INDICATOR_CONDITION],
+    [Define to a C preprocessor expression that evaluates to 1 or 0,
+     depending whether the gnulib module $1 shall be considered present.])
+])
+
+# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
+# defines a C macro indicating the presence of the given module
+# in lib or tests. This is useful to determine whether the module
+# should be tested.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
+[
+  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
+    [Define to 1 when the gnulib module $1 should be tested.])
+])
+
+# m4_foreach_w
+# is a backport of autoconf-2.59c's m4_foreach_w.
+# Remove this macro when we can assume autoconf >= 2.60.
+m4_ifndef([m4_foreach_w],
+  [m4_define([m4_foreach_w],
+    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
+
+# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
+# ----------------------------------------------------
+# Backport of autoconf-2.63b's macro.
+# Remove this macro when we can assume autoconf >= 2.64.
+m4_ifndef([AS_VAR_IF],
+[m4_define([AS_VAR_IF],
+[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+
+# AC_PROG_MKDIR_P
+# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
+# for interoperability with automake-1.9.6 from autoconf-2.62.
+# Remove this macro when we can assume autoconf >= 2.62 or
+# autoconf >= 2.60 && automake >= 1.10.
+m4_ifdef([AC_PROG_MKDIR_P], [
+  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
+  m4_define([AC_PROG_MKDIR_P],
+    m4_defn([AC_PROG_MKDIR_P])[
+    AC_SUBST([MKDIR_P])])], [
+  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
+  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
+    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+     MKDIR_P='$(mkdir_p)'
+     AC_SUBST([MKDIR_P])])])
+
+# AC_C_RESTRICT
+# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
+# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
+# works.
+# This definition can be removed once autoconf >= 2.62 can be assumed.
+m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.62]),[-1],[
+AC_DEFUN([AC_C_RESTRICT],
+[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
+  [ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+      [[typedef int * int_ptr;
+        int foo (int_ptr $ac_kw ip) {
+        return ip[0];
+       }]],
+      [[int s[1];
+        int * $ac_kw t = s;
+        t[0] = 0;
+        return foo(t)]])],
+      [ac_cv_c_restrict=$ac_kw])
+     test "$ac_cv_c_restrict" != no && break
+   done
+  ])
+ AH_VERBATIM([restrict],
+[/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict, even
+   though the corresponding Sun C compiler does, which causes
+   "#define restrict _Restrict" in the previous line.  Perhaps some future
+   version of Sun C++ will work with _Restrict; if so, it'll probably
+   define __RESTRICT, just as Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+#endif])
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) AC_DEFINE([restrict], []) ;;
+   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
+ esac
+])
+])
+
+# gl_BIGENDIAN
+# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
+# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
+# macros invoke AC_C_BIGENDIAN with arguments.
+AC_DEFUN([gl_BIGENDIAN],
+[
+  AC_C_BIGENDIAN
+])
+
+# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
+# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
+# output a spurious "(cached)" mark in the midst of other configure output.
+# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
+# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
+AC_DEFUN([gl_CACHE_VAL_SILENT],
+[
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  AC_CACHE_VAL([$1], [$2])
+  as_echo_n="$saved_as_echo_n"
+])
diff --git a/gl/m4/gnulib-comp.m4 b/gl/m4/gnulib-comp.m4
new file mode 100644 (file)
index 0000000..731b98d
--- /dev/null
@@ -0,0 +1,341 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the compiled summary of the specification in
+# gnulib-cache.m4. It lists the computed macro invocations that need
+# to be invoked from configure.ac.
+# In projects using CVS, this file can be treated like other built files.
+
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Checks for programs", right after AC_PROG_CC, and certainly before
+# any checks for libraries, header files, types and library functions.
+AC_DEFUN([gl_EARLY],
+[
+  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
+  m4_pattern_allow([^gl_ES$])dnl a valid locale name
+  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+  AC_REQUIRE([AC_PROG_RANLIB])
+  # Code from module arg-nonnull:
+  # Code from module autobuild:
+  AB_INIT
+  # Code from module c++defs:
+  # Code from module extensions:
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  # Code from module fdl-1.3:
+  # Code from module gendocs:
+  # Code from module getopt-gnu:
+  # Code from module getopt-posix:
+  # Code from module gettext-h:
+  # Code from module gnumakefile:
+  # Code from module include_next:
+  # Code from module maintainer-makefile:
+  # Code from module manywarnings:
+  # Code from module multiarch:
+  # Code from module pmccabe2html:
+  # Code from module progname:
+  # Code from module read-file:
+  # Code from module realloc-posix:
+  # Code from module stdarg:
+  dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode
+  dnl for the builtin va_copy to work.  With Autoconf 2.60 or later,
+  dnl AC_PROG_CC_STDC arranges for this.  With older Autoconf AC_PROG_CC_STDC
+  dnl shouldn't hurt, though installers are on their own to set c99 mode.
+  AC_REQUIRE([AC_PROG_CC_STDC])
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module stdlib:
+  # Code from module unistd:
+  # Code from module update-copyright:
+  # Code from module useless-if-before-free:
+  # Code from module valgrind-tests:
+  # Code from module vc-list-files:
+  # Code from module version-etc:
+  # Code from module version-etc-fsf:
+  # Code from module warn-on-use:
+  # Code from module warnings:
+  # Code from module wchar:
+])
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Check for header files, types and library functions".
+AC_DEFUN([gl_INIT],
+[
+  AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
+  gl_cond_libtool=true
+  gl_m4_base='gl/m4'
+  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
+  m4_pushdef([gl_LIBSOURCES_LIST], [])
+  m4_pushdef([gl_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='gl'
+  # Code from module arg-nonnull:
+  # Code from module autobuild:
+  # Code from module c++defs:
+  # Code from module extensions:
+  # Code from module fdl-1.3:
+  # Code from module gendocs:
+  # Code from module getopt-gnu:
+  gl_FUNC_GETOPT_GNU
+  gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu])
+  # Code from module getopt-posix:
+  gl_FUNC_GETOPT_POSIX
+  # Code from module gettext-h:
+  AC_SUBST([LIBINTL])
+  AC_SUBST([LTLIBINTL])
+  # Code from module gnumakefile:
+  # Autoconf 2.61a.99 and earlier don't support linking a file only
+  # in VPATH builds.  But since GNUmakefile is for maintainer use
+  # only, it does not matter if we skip the link with older autoconf.
+  # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH
+  # builds, so use a shell variable to bypass this.
+  GNUmakefile=GNUmakefile
+  m4_if(m4_version_compare([2.61a.100],
+       m4_defn([m4_PACKAGE_VERSION])), [1], [],
+        [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [],
+       [GNUmakefile=$GNUmakefile])])
+  # Code from module include_next:
+  # Code from module maintainer-makefile:
+  AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER],
+    [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])])
+  # Code from module manywarnings:
+  # Code from module multiarch:
+  gl_MULTIARCH
+  # Code from module pmccabe2html:
+  AC_PATH_PROG([PMCCABE], [pmccabe], [false])
+  # Code from module progname:
+  AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>])
+  AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>])
+  # Code from module read-file:
+  gl_FUNC_READ_FILE
+  # Code from module realloc-posix:
+  gl_FUNC_REALLOC_POSIX
+  gl_STDLIB_MODULE_INDICATOR([realloc-posix])
+  # Code from module stdarg:
+  gl_STDARG_H
+  # Code from module stddef:
+  gl_STDDEF_H
+  # Code from module stdint:
+  gl_STDINT_H
+  # Code from module stdlib:
+  gl_STDLIB_H
+  # Code from module unistd:
+  gl_UNISTD_H
+  # Code from module update-copyright:
+  # Code from module useless-if-before-free:
+  # Code from module valgrind-tests:
+  gl_VALGRIND_TESTS
+  # Code from module vc-list-files:
+  # Code from module version-etc:
+  gl_VERSION_ETC
+  # Code from module version-etc-fsf:
+  # Code from module warn-on-use:
+  # Code from module warnings:
+  AC_SUBST([WARN_CFLAGS])
+  # Code from module wchar:
+  gl_WCHAR_H
+  # End of code from modules
+  m4_ifval(gl_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gl_LIBSOURCES_DIR])
+  m4_popdef([gl_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
+    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
+  ])
+  gltests_libdeps=
+  gltests_ltlibdeps=
+  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
+  m4_pushdef([gltests_LIBSOURCES_LIST], [])
+  m4_pushdef([gltests_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='tests'
+changequote(,)dnl
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+changequote([, ])dnl
+  AC_SUBST([gltests_WITNESS])
+  gl_module_indicator_condition=$gltests_WITNESS
+  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+  gl_VALGRIND_TESTS
+  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
+  m4_ifval(gltests_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gltests_LIBSOURCES_DIR])
+  m4_popdef([gltests_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
+    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
+  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gl_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gl_LIBSOURCES_DIR], [gl])
+      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
+  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gltests_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gltests_LIBSOURCES_DIR], [tests])
+      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# This macro records the list of files which have been installed by
+# gnulib-tool and may be removed by future gnulib-tool invocations.
+AC_DEFUN([gl_FILE_LIST], [
+  build-aux/arg-nonnull.h
+  build-aux/c++defs.h
+  build-aux/gendocs.sh
+  build-aux/pmccabe.css
+  build-aux/pmccabe2html
+  build-aux/update-copyright
+  build-aux/useless-if-before-free
+  build-aux/vc-list-files
+  build-aux/warn-on-use.h
+  doc/fdl-1.3.texi
+  doc/gendocs_template
+  lib/getopt.c
+  lib/getopt.in.h
+  lib/getopt1.c
+  lib/getopt_int.h
+  lib/gettext.h
+  lib/progname.c
+  lib/progname.h
+  lib/read-file.c
+  lib/read-file.h
+  lib/realloc.c
+  lib/stdarg.in.h
+  lib/stddef.in.h
+  lib/stdint.in.h
+  lib/stdlib.in.h
+  lib/unistd.in.h
+  lib/version-etc-fsf.c
+  lib/version-etc.c
+  lib/version-etc.h
+  lib/wchar.in.h
+  m4/00gnulib.m4
+  m4/autobuild.m4
+  m4/extensions.m4
+  m4/getopt.m4
+  m4/gnulib-common.m4
+  m4/include_next.m4
+  m4/longlong.m4
+  m4/malloc.m4
+  m4/manywarnings.m4
+  m4/multiarch.m4
+  m4/read-file.m4
+  m4/realloc.m4
+  m4/stdarg.m4
+  m4/stddef_h.m4
+  m4/stdint.m4
+  m4/stdlib_h.m4
+  m4/unistd_h.m4
+  m4/valgrind-tests.m4
+  m4/version-etc.m4
+  m4/warn-on-use.m4
+  m4/warnings.m4
+  m4/wchar_h.m4
+  m4/wchar_t.m4
+  m4/wint_t.m4
+  top/GNUmakefile
+  top/maint.mk
+])
diff --git a/gl/m4/include_next.m4 b/gl/m4/include_next.m4
new file mode 100644 (file)
index 0000000..c7e0672
--- /dev/null
@@ -0,0 +1,187 @@
+# include_next.m4 serial 14
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Derek Price.
+
+dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
+dnl
+dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
+dnl 'include' otherwise.
+dnl
+dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
+dnl supports it in the special case that it is the first include directive in
+dnl the given file, or to 'include' otherwise.
+dnl
+dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
+dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
+dnl '#pragma GCC system_header' has the same effect as if the file was found
+dnl through the include search path specified with '-isystem' options (as
+dnl opposed to the search path specified with '-I' options). Namely, gcc
+dnl does not warn about some things, and on some systems (Solaris and Interix)
+dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
+dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
+dnl of plain '__STDC__'.
+
+AC_DEFUN([gl_INCLUDE_NEXT],
+[
+  AC_LANG_PREPROC_REQUIRE()
+  AC_CACHE_CHECK([whether the preprocessor supports include_next],
+    [gl_cv_have_include_next],
+    [rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
+     dnl AIX 6.1 support include_next when used as first preprocessor directive
+     dnl in a file, but not when preceded by another include directive. Check
+     dnl for this bug by including <stdio.h>.
+     dnl Additionally, with this same compiler, include_next is a no-op when
+     dnl used in a header file that was included by specifying its absolute
+     dnl file name. Despite these two bugs, include_next is used in the
+     dnl compiler's <math.h>. By virtue of the second bug, we need to use
+     dnl include_next as well in this case.
+     cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+     AC_COMPILE_IFELSE([#include <conftest.h>],
+       [gl_cv_have_include_next=yes],
+       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        AC_COMPILE_IFELSE([#include <conftest.h>],
+          [gl_cv_have_include_next=buggy],
+          [gl_cv_have_include_next=no])
+       ])
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+    ])
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+  AC_SUBST([INCLUDE_NEXT])
+  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
+  AC_SUBST([PRAGMA_SYSTEM_HEADER])
+])
+
+# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------------
+# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
+# '<foo.h>'; otherwise define it to be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# Also, if #include_next works as first preprocessing directive in a file,
+# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
+# be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# That way, a header file with the following line:
+#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
+# or
+#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
+# behaves (after sed substitution) as if it contained
+#       #include_next <foo.h>
+# even if the compiler does not support include_next.
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use `""', not `<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+AC_DEFUN([gl_CHECK_NEXT_HEADERS],
+[
+  AC_REQUIRE([gl_INCLUDE_NEXT])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_HEADERS_ONCE([$1])
+
+  m4_foreach_w([gl_HEADER_NAME], [$1],
+    [AS_VAR_PUSHDEF([gl_next_header],
+                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
+     if test $gl_cv_have_include_next = yes; then
+       AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+     else
+       AC_CACHE_CHECK(
+         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+         m4_defn([gl_next_header]),
+         [AS_VAR_PUSHDEF([gl_header_exists],
+                         [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
+          if test AS_VAR_GET(gl_header_exists) = yes; then
+            AC_LANG_CONFTEST(
+              [AC_LANG_SOURCE(
+                 [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
+               )])
+            dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+            dnl that contain only a #include of other header files and no
+            dnl non-comment tokens of their own. This leads to a failure to
+            dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+            dnl and others. The workaround is to force preservation of comments
+            dnl through option -C. This ensures all necessary #line directives
+            dnl are present. GCC supports option -C as well.
+            case "$host_os" in
+              aix*) gl_absname_cpp="$ac_cpp -C" ;;
+              *)    gl_absname_cpp="$ac_cpp" ;;
+            esac
+            dnl eval is necessary to expand gl_absname_cpp.
+            dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+            dnl so use subshell.
+            AS_VAR_SET([gl_next_header],
+              ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+               sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{
+                 s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1#
+                 s#^/[^/]#//&#
+                 p
+                 q
+               }'`'"'])
+          else
+            AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>'])
+          fi
+          AS_VAR_POPDEF([gl_header_exists])])
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
+       [AS_VAR_GET([gl_next_header])])
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=AS_VAR_GET([gl_next_header])
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+       [$gl_next_as_first_directive])
+     AS_VAR_POPDEF([gl_next_header])])
+])
diff --git a/gl/m4/longlong.m4 b/gl/m4/longlong.m4
new file mode 100644 (file)
index 0000000..cca3c1a
--- /dev/null
@@ -0,0 +1,106 @@
+# longlong.m4 serial 14
+dnl Copyright (C) 1999-2007, 2009-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+    [AC_LINK_IFELSE(
+       [_AC_TYPE_LONG_LONG_SNIPPET],
+       [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+        dnl If cross compiling, assume the bug isn't important, since
+        dnl nobody cross compiles for this platform as far as we know.
+        AC_RUN_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[@%:@include <limits.h>
+               @%:@ifndef LLONG_MAX
+               @%:@ define HALF \
+                        (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+               @%:@ define LLONG_MAX (HALF - 1 + HALF)
+               @%:@endif]],
+             [[long long int n = 1;
+               int i;
+               for (i = 0; ; i++)
+                 {
+                   long long int m = n << i;
+                   if (m >> i != n)
+                     return 1;
+                   if (LLONG_MAX / 2 < m)
+                     break;
+                 }
+               return 0;]])],
+          [ac_cv_type_long_long_int=yes],
+          [ac_cv_type_long_long_int=no],
+          [ac_cv_type_long_long_int=yes])],
+       [ac_cv_type_long_long_int=no])])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type `long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [AC_LINK_IFELSE(
+       [_AC_TYPE_LONG_LONG_SNIPPET],
+       [ac_cv_type_unsigned_long_long_int=yes],
+       [ac_cv_type_unsigned_long_long_int=no])])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type `unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/gl/m4/malloc.m4 b/gl/m4/malloc.m4
new file mode 100644 (file)
index 0000000..910ac92
--- /dev/null
@@ -0,0 +1,41 @@
+# malloc.m4 serial 9
+dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_FUNC_MALLOC_POSIX
+# --------------------
+# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails), and replace malloc if it is not.
+AC_DEFUN([gl_FUNC_MALLOC_POSIX],
+[
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  if test $gl_cv_func_malloc_posix = yes; then
+    HAVE_MALLOC_POSIX=1
+    AC_DEFINE([HAVE_MALLOC_POSIX], [1],
+      [Define if the 'malloc' function is POSIX compliant.])
+  else
+    AC_LIBOBJ([malloc])
+    HAVE_MALLOC_POSIX=0
+  fi
+  AC_SUBST([HAVE_MALLOC_POSIX])
+])
+
+# Test whether malloc, realloc, calloc are POSIX compliant,
+# Set gl_cv_func_malloc_posix to yes or no accordingly.
+AC_DEFUN([gl_CHECK_MALLOC_POSIX],
+[
+  AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant],
+    [gl_cv_func_malloc_posix],
+    [
+      dnl It is too dangerous to try to allocate a large amount of memory:
+      dnl some systems go to their knees when you do that. So assume that
+      dnl all Unix implementations of the function are POSIX compliant.
+      AC_TRY_COMPILE([],
+        [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+         choke me
+         #endif
+        ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no])
+    ])
+])
diff --git a/gl/m4/manywarnings.m4 b/gl/m4/manywarnings.m4
new file mode 100644 (file)
index 0000000..844a9ba
--- /dev/null
@@ -0,0 +1,108 @@
+# manywarnings.m4 serial 1
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR)
+# --------------------------------------------------
+# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR.
+# Elements separated by whitespace.  In set logic terms, the function
+# does OUTVAR = LISTVAR \ REMOVEVAR.
+AC_DEFUN([gl_MANYWARN_COMPLEMENT],
+[
+  gl_warn_set=
+  set x $2; shift
+  for gl_warn_item
+  do
+    case " $3 " in
+      *" $gl_warn_item "*)
+        ;;
+      *)
+        gl_warn_set="$gl_warn_set $gl_warn_item"
+        ;;
+    esac
+  done
+  $1=$gl_warn_set
+])
+
+# gl_MANYWARN_ALL_GCC(VARIABLE)
+# -----------------------------
+# Add all documented GCC (currently as per version 4.4) warning
+# parameters to variable VARIABLE.  Note that you need to test them
+# using gl_WARN_ADD if you want to make sure your gcc understands it.
+AC_DEFUN([gl_MANYWARN_ALL_GCC],
+[
+ gl_manywarn_set=
+ for gl_manywarn_item in \
+   -Wall \
+   -W \
+   -Wformat-y2k \
+   -Wformat-nonliteral \
+   -Wformat-security \
+   -Winit-self \
+   -Wmissing-include-dirs \
+   -Wswitch-default \
+   -Wswitch-enum \
+   -Wunused \
+   -Wunknown-pragmas \
+   -Wstrict-aliasing \
+   -Wstrict-overflow \
+   -Wsystem-headers \
+   -Wfloat-equal \
+   -Wtraditional \
+   -Wtraditional-conversion \
+   -Wdeclaration-after-statement \
+   -Wundef \
+   -Wshadow \
+   -Wunsafe-loop-optimizations \
+   -Wpointer-arith \
+   -Wbad-function-cast \
+   -Wc++-compat \
+   -Wcast-qual \
+   -Wcast-align \
+   -Wwrite-strings \
+   -Wconversion \
+   -Wsign-conversion \
+   -Wlogical-op \
+   -Waggregate-return \
+   -Wstrict-prototypes \
+   -Wold-style-definition \
+   -Wmissing-prototypes \
+   -Wmissing-declarations \
+   -Wmissing-noreturn \
+   -Wmissing-format-attribute \
+   -Wpacked \
+   -Wpadded \
+   -Wredundant-decls \
+   -Wnested-externs \
+   -Wunreachable-code \
+   -Winline \
+   -Winvalid-pch \
+   -Wlong-long \
+   -Wvla \
+   -Wvolatile-register-var \
+   -Wdisabled-optimization \
+   -Wstack-protector \
+   -Woverlength-strings \
+   -Wbuiltin-macro-redefined \
+   -Wmudflap \
+   -Wpacked-bitfield-compat \
+   -Wsync-nand \
+  ; do
+    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
+  done
+ # The following are not documented in the manual but are included in
+ # output from gcc --help=warnings.
+ for gl_manywarn_item in \
+   -Wattributes \
+   -Wcoverage-mismatch \
+   -Wmultichar \
+   -Wunused-macros \
+  ; do
+    gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item"
+  done
+  $1=$gl_manywarn_set
+])
diff --git a/gl/m4/multiarch.m4 b/gl/m4/multiarch.m4
new file mode 100644 (file)
index 0000000..389bd2b
--- /dev/null
@@ -0,0 +1,65 @@
+# multiarch.m4 serial 5
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine whether the compiler is or may be producing universal binaries.
+#
+# On MacOS X 10.5 and later systems, the user can create libraries and
+# executables that work on multiple system types--known as "fat" or
+# "universal" binaries--by specifying multiple '-arch' options to the
+# compiler but only a single '-arch' option to the preprocessor.  Like
+# this:
+#
+#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CPP="gcc -E" CXXCPP="g++ -E"
+#
+# Detect this situation and set the macro AA_APPLE_UNIVERSAL_BUILD at the
+# beginning of config.h and set APPLE_UNIVERSAL_BUILD accordingly.
+
+AC_DEFUN_ONCE([gl_MULTIARCH],
+[
+  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
+  gl_cv_c_multiarch=no
+  AC_COMPILE_IFELSE(
+    [AC_LANG_SOURCE(
+      [[#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+      ]])],
+    [
+     dnl Check for potential -arch flags.  It is not universal unless
+     dnl there are at least two -arch flags with different values.
+     arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+    ])
+  if test $gl_cv_c_multiarch = yes; then
+    AC_DEFINE([AA_APPLE_UNIVERSAL_BUILD], [1],
+      [Define if the compiler is building for multiple architectures of Apple platforms at once.])
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+  AC_SUBST([APPLE_UNIVERSAL_BUILD])
+])
diff --git a/gl/m4/read-file.m4 b/gl/m4/read-file.m4
new file mode 100644 (file)
index 0000000..35a3a48
--- /dev/null
@@ -0,0 +1,15 @@
+# read-file.m4 serial 2
+dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009, 2010 Free Software
+dnl Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_READ_FILE],
+[
+  AC_LIBOBJ([read-file])
+  gl_PREREQ_READ_FILE
+])
+
+# Prerequisites of lib/read-file.c.
+AC_DEFUN([gl_PREREQ_READ_FILE], [:])
diff --git a/gl/m4/realloc.m4 b/gl/m4/realloc.m4
new file mode 100644 (file)
index 0000000..dc30235
--- /dev/null
@@ -0,0 +1,23 @@
+# realloc.m4 serial 9
+dnl Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_FUNC_REALLOC_POSIX
+# ---------------------
+# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it
+# fails), and replace realloc if it is not.
+AC_DEFUN([gl_FUNC_REALLOC_POSIX],
+[
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  if test $gl_cv_func_malloc_posix = yes; then
+    HAVE_REALLOC_POSIX=1
+    AC_DEFINE([HAVE_REALLOC_POSIX], [1],
+      [Define if the 'realloc' function is POSIX compliant.])
+  else
+    AC_LIBOBJ([realloc])
+    HAVE_REALLOC_POSIX=0
+  fi
+  AC_SUBST([HAVE_REALLOC_POSIX])
+])
diff --git a/gl/m4/stdarg.m4 b/gl/m4/stdarg.m4
new file mode 100644 (file)
index 0000000..5c87bd8
--- /dev/null
@@ -0,0 +1,67 @@
+# stdarg.m4 serial 3
+dnl Copyright (C) 2006, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Provide a working va_copy in combination with <stdarg.h>.
+
+AC_DEFUN([gl_STDARG_H],
+[
+  STDARG_H='';                AC_SUBST([STDARG_H])
+  NEXT_STDARG_H='<stdarg.h>'; AC_SUBST([NEXT_STDARG_H])
+  AC_MSG_CHECKING([for va_copy])
+  AC_CACHE_VAL([gl_cv_func_va_copy], [
+    AC_TRY_COMPILE([#include <stdarg.h>], [
+#ifndef va_copy
+void (*func) (va_list, va_list) = va_copy;
+#endif
+],
+      [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no])])
+  AC_MSG_RESULT([$gl_cv_func_va_copy])
+  if test $gl_cv_func_va_copy = no; then
+    dnl Provide a substitute.
+    dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5
+    dnl with some versions of the /usr/vac/bin/cc compiler. It has an <stdarg.h>
+    dnl which does '#undef va_copy', leading to a missing va_copy symbol. For
+    dnl this platform, we use an <stdarg.h> substitute. But we cannot use this
+    dnl approach on other platforms, because <stdarg.h> often defines only
+    dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do
+    dnl not work in this situation.
+    AC_EGREP_CPP([vaccine],
+      [#if defined _AIX && !defined __GNUC__
+        AIX vaccine
+       #endif
+      ], [gl_aixcc=yes], [gl_aixcc=no])
+    if test $gl_aixcc = yes; then
+      dnl Provide a substitute <stdarg.h> file.
+      STDARG_H=stdarg.h
+      gl_CHECK_NEXT_HEADERS([stdarg.h])
+      dnl Fallback for the case when <stdarg.h> contains only macro definitions.
+      if test "$gl_cv_next_stdarg_h" = '""'; then
+        gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
+        NEXT_STDARG_H="$gl_cv_next_stdarg_h"
+      fi
+    else
+      dnl Provide a substitute in <config.h>, either __va_copy or as a simple
+      dnl assignment.
+      gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
+        AC_TRY_COMPILE([#include <stdarg.h>], [
+#ifndef __va_copy
+error, bail out
+#endif
+],
+          [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])])
+      if test $gl_cv_func___va_copy = yes; then
+        AC_DEFINE([va_copy], [__va_copy],
+          [Define as a macro for copying va_list variables.])
+      else
+        AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed.  */
+#define gl_va_copy(a,b) ((a) = (b))])
+        AC_DEFINE([va_copy], [gl_va_copy],
+          [Define as a macro for copying va_list variables.])
+      fi
+    fi
+  fi
+])
diff --git a/gl/m4/stddef_h.m4 b/gl/m4/stddef_h.m4
new file mode 100644 (file)
index 0000000..c3ae569
--- /dev/null
@@ -0,0 +1,45 @@
+dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 2
+dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDDEF_H],
+[
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
+    [gl_cv_decl_null_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+]])],
+      [gl_cv_decl_null_works=yes],
+      [gl_cv_decl_null_works=no])])
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+  if test -n "$STDDEF_H"; then
+    gl_CHECK_NEXT_HEADERS([stddef.h])
+  fi
+])
+
+AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_STDDEF_H_DEFAULTS],
+[
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
+  STDDEF_H='';                   AC_SUBST([STDDEF_H])
+])
diff --git a/gl/m4/stdint.m4 b/gl/m4/stdint.m4
new file mode 100644 (file)
index 0000000..1cc57e6
--- /dev/null
@@ -0,0 +1,472 @@
+# stdint.m4 serial 34
+dnl Copyright (C) 2001-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Bruno Haible.
+dnl Test whether <stdint.h> is supported or must be substituted.
+
+AC_DEFUN([gl_STDINT_H],
+[
+  AC_PREREQ([2.59])dnl
+
+  dnl Check for long long int and unsigned long long int.
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_LONG_LONG_INT])
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
+
+  dnl Check for <inttypes.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
+  if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+  AC_SUBST([HAVE_INTTYPES_H])
+
+  dnl Check for <sys/types.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
+  if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+  AC_SUBST([HAVE_SYS_TYPES_H])
+
+  gl_CHECK_NEXT_HEADERS([stdint.h])
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+  AC_SUBST([HAVE_STDINT_H])
+
+  dnl Now see whether we need a substitute <stdint.h>.
+  if test $ac_cv_header_stdint_h = yes; then
+    AC_CACHE_CHECK([whether stdint.h conforms to C99],
+      [gl_cv_header_working_stdint_h],
+      [gl_cv_header_working_stdint_h=no
+       AC_COMPILE_IFELSE([
+         AC_LANG_PROGRAM([[
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+]
+gl_STDINT_INCLUDES
+[
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+         ]])],
+         [dnl Determine whether the various *_MIN, *_MAX macros are usable
+          dnl in preprocessor expression. We could do it by compiling a test
+          dnl program for each of these macros. It is faster to run a program
+          dnl that inspects the macro expansion.
+          dnl This detects a bug on HP-UX 11.23/ia64.
+          AC_RUN_IFELSE([
+            AC_LANG_PROGRAM([[
+#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
+#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+]], [[
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return 1;
+    }
+  return 0;
+]])],
+              [gl_cv_header_working_stdint_h=yes],
+              [],
+              [dnl When cross-compiling, assume it works.
+               gl_cv_header_working_stdint_h=yes
+              ])
+         ])
+      ])
+  fi
+  if test "$gl_cv_header_working_stdint_h" = yes; then
+    STDINT_H=
+  else
+    dnl Check for <sys/inttypes.h>, and for
+    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
+    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
+    if test $ac_cv_header_sys_inttypes_h = yes; then
+      HAVE_SYS_INTTYPES_H=1
+    else
+      HAVE_SYS_INTTYPES_H=0
+    fi
+    AC_SUBST([HAVE_SYS_INTTYPES_H])
+    if test $ac_cv_header_sys_bitypes_h = yes; then
+      HAVE_SYS_BITYPES_H=1
+    else
+      HAVE_SYS_BITYPES_H=0
+    fi
+    AC_SUBST([HAVE_SYS_BITYPES_H])
+
+    dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+    dnl character support).
+    AC_CHECK_HEADERS_ONCE([wchar.h])
+
+    gl_STDINT_TYPE_PROPERTIES
+    STDINT_H=stdint.h
+  fi
+  AC_SUBST([STDINT_H])
+])
+
+dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
+dnl Determine the size of each of the given types in bits.
+AC_DEFUN([gl_STDINT_BITSIZEOF],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to the number of bits in type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
+      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
+         [$2
+#include <limits.h>], [result=unknown])
+       eval gl_cv_bitsizeof_${gltype}=\$result
+      ])
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
+      dnl do a syntax check even on unused #if conditions and give an error
+      dnl on valid C code like this:
+      dnl   #if 0
+      dnl   # if  > 32
+      dnl   # endif
+      dnl   #endif
+      result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
+dnl Determine the signedness of each of the given types.
+dnl Define HAVE_SIGNED_TYPE if type is signed.
+AC_DEFUN([gl_CHECK_TYPES_SIGNED],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to 1 if ']gltype[' is a signed integer type.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([$2[
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
+         result=yes, result=no)
+       eval gl_cv_type_${gltype}_signed=\$result
+      ])
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
+dnl Determine the suffix to use for integer constants of the given types.
+dnl Define t_SUFFIX for each such type.
+AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
+       [Define to l, ll, u, ul, ull, etc., as suitable for
+        constants of type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for $gltype integer literal suffix],
+      [gl_cv_type_${gltype}_suffix],
+      [eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([$2[
+              extern $gltype foo;
+              extern $gltype1 foo;]])],
+           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done])
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
+])
+
+dnl gl_STDINT_INCLUDES
+AC_DEFUN([gl_STDINT_INCLUDES],
+[[
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+]])
+
+dnl gl_STDINT_TYPE_PROPERTIES
+dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
+dnl of interest to stdint.in.h.
+AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
+[
+  AC_REQUIRE([gl_MULTIARCH])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
+
+# Hey Emacs!
+# Local Variables:
+# indent-tabs-mode: nil
+# End:
diff --git a/gl/m4/stdlib_h.m4 b/gl/m4/stdlib_h.m4
new file mode 100644 (file)
index 0000000..dd84796
--- /dev/null
@@ -0,0 +1,110 @@
+# stdlib_h.m4 serial 28
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDLIB_H],
+[
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([stdlib.h])
+  AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT])
+  if test $ac_cv_header_random_h = yes; then
+    HAVE_RANDOM_H=1
+  else
+    HAVE_RANDOM_H=0
+  fi
+  AC_SUBST([HAVE_RANDOM_H])
+  AC_CHECK_TYPES([struct random_data],
+    [], [HAVE_STRUCT_RANDOM_DATA=0],
+    [[#include <stdlib.h>
+      #if HAVE_RANDOM_H
+      # include <random.h>
+      #endif
+    ]])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <stdlib.h>
+#if HAVE_SYS_LOADAVG_H
+# include <sys/loadavg.h>
+#endif
+#if HAVE_RANDOM_H
+# include <random.h>
+#endif
+    ]], [atoll canonicalize_file_name getloadavg getsubopt grantpt mkdtemp
+    mkostemp mkostemps mkstemp mkstemps ptsname random_r initstat_r srandom_r
+    setstate_r realpath rpmatch setenv strtod strtoll strtoull unlockpt
+    unsetenv])
+])
+
+AC_DEFUN([gl_STDLIB_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDLIB_H_DEFAULTS],
+[
+  GNULIB_ATOLL=0;         AC_SUBST([GNULIB_ATOLL])
+  GNULIB_CALLOC_POSIX=0;  AC_SUBST([GNULIB_CALLOC_POSIX])
+  GNULIB_CANONICALIZE_FILE_NAME=0;  AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME])
+  GNULIB_GETLOADAVG=0;    AC_SUBST([GNULIB_GETLOADAVG])
+  GNULIB_GETSUBOPT=0;     AC_SUBST([GNULIB_GETSUBOPT])
+  GNULIB_GRANTPT=0;       AC_SUBST([GNULIB_GRANTPT])
+  GNULIB_MALLOC_POSIX=0;  AC_SUBST([GNULIB_MALLOC_POSIX])
+  GNULIB_MKDTEMP=0;       AC_SUBST([GNULIB_MKDTEMP])
+  GNULIB_MKOSTEMP=0;      AC_SUBST([GNULIB_MKOSTEMP])
+  GNULIB_MKOSTEMPS=0;     AC_SUBST([GNULIB_MKOSTEMPS])
+  GNULIB_MKSTEMP=0;       AC_SUBST([GNULIB_MKSTEMP])
+  GNULIB_MKSTEMPS=0;      AC_SUBST([GNULIB_MKSTEMPS])
+  GNULIB_PTSNAME=0;       AC_SUBST([GNULIB_PTSNAME])
+  GNULIB_PUTENV=0;        AC_SUBST([GNULIB_PUTENV])
+  GNULIB_RANDOM_R=0;      AC_SUBST([GNULIB_RANDOM_R])
+  GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX])
+  GNULIB_REALPATH=0;      AC_SUBST([GNULIB_REALPATH])
+  GNULIB_RPMATCH=0;       AC_SUBST([GNULIB_RPMATCH])
+  GNULIB_SETENV=0;        AC_SUBST([GNULIB_SETENV])
+  GNULIB_STRTOD=0;        AC_SUBST([GNULIB_STRTOD])
+  GNULIB_STRTOLL=0;       AC_SUBST([GNULIB_STRTOLL])
+  GNULIB_STRTOULL=0;      AC_SUBST([GNULIB_STRTOULL])
+  GNULIB_UNLOCKPT=0;      AC_SUBST([GNULIB_UNLOCKPT])
+  GNULIB_UNSETENV=0;      AC_SUBST([GNULIB_UNSETENV])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_ATOLL=1;              AC_SUBST([HAVE_ATOLL])
+  HAVE_CALLOC_POSIX=1;       AC_SUBST([HAVE_CALLOC_POSIX])
+  HAVE_CANONICALIZE_FILE_NAME=1;  AC_SUBST([HAVE_CANONICALIZE_FILE_NAME])
+  HAVE_DECL_GETLOADAVG=1;    AC_SUBST([HAVE_DECL_GETLOADAVG])
+  HAVE_GETSUBOPT=1;          AC_SUBST([HAVE_GETSUBOPT])
+  HAVE_GRANTPT=1;            AC_SUBST([HAVE_GRANTPT])
+  HAVE_MALLOC_POSIX=1;       AC_SUBST([HAVE_MALLOC_POSIX])
+  HAVE_MKDTEMP=1;            AC_SUBST([HAVE_MKDTEMP])
+  HAVE_MKOSTEMP=1;           AC_SUBST([HAVE_MKOSTEMP])
+  HAVE_MKOSTEMPS=1;          AC_SUBST([HAVE_MKOSTEMPS])
+  HAVE_MKSTEMP=1;            AC_SUBST([HAVE_MKSTEMP])
+  HAVE_MKSTEMPS=1;           AC_SUBST([HAVE_MKSTEMPS])
+  HAVE_PTSNAME=1;            AC_SUBST([HAVE_PTSNAME])
+  HAVE_RANDOM_R=1;           AC_SUBST([HAVE_RANDOM_R])
+  HAVE_REALLOC_POSIX=1;      AC_SUBST([HAVE_REALLOC_POSIX])
+  HAVE_REALPATH=1;           AC_SUBST([HAVE_REALPATH])
+  HAVE_RPMATCH=1;            AC_SUBST([HAVE_RPMATCH])
+  HAVE_SETENV=1;             AC_SUBST([HAVE_SETENV])
+  HAVE_STRTOD=1;             AC_SUBST([HAVE_STRTOD])
+  HAVE_STRTOLL=1;            AC_SUBST([HAVE_STRTOLL])
+  HAVE_STRTOULL=1;           AC_SUBST([HAVE_STRTOULL])
+  HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA])
+  HAVE_SYS_LOADAVG_H=0;      AC_SUBST([HAVE_SYS_LOADAVG_H])
+  HAVE_UNLOCKPT=1;           AC_SUBST([HAVE_UNLOCKPT])
+  HAVE_UNSETENV=1;           AC_SUBST([HAVE_UNSETENV])
+  REPLACE_CANONICALIZE_FILE_NAME=0;  AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME])
+  REPLACE_MKSTEMP=0;         AC_SUBST([REPLACE_MKSTEMP])
+  REPLACE_PUTENV=0;          AC_SUBST([REPLACE_PUTENV])
+  REPLACE_REALPATH=0;        AC_SUBST([REPLACE_REALPATH])
+  REPLACE_SETENV=0;          AC_SUBST([REPLACE_SETENV])
+  REPLACE_STRTOD=0;          AC_SUBST([REPLACE_STRTOD])
+  REPLACE_UNSETENV=0;        AC_SUBST([REPLACE_UNSETENV])
+])
diff --git a/gl/m4/unistd_h.m4 b/gl/m4/unistd_h.m4
new file mode 100644 (file)
index 0000000..48d06c7
--- /dev/null
@@ -0,0 +1,159 @@
+# unistd_h.m4 serial 46
+dnl Copyright (C) 2006-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Simon Josefsson, Bruno Haible.
+
+AC_DEFUN([gl_UNISTD_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  AC_REQUIRE([AC_C_INLINE])
+
+  gl_CHECK_NEXT_HEADERS([unistd.h])
+
+  AC_CHECK_HEADERS_ONCE([unistd.h])
+  if test $ac_cv_header_unistd_h = yes; then
+    HAVE_UNISTD_H=1
+  else
+    HAVE_UNISTD_H=0
+  fi
+  AC_SUBST([HAVE_UNISTD_H])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <unistd.h>
+/* Some systems declare various items in the wrong headers.  */
+#ifndef __GLIBC__
+# include <fcntl.h>
+# include <stdio.h>
+# include <stdlib.h>
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+    ]], [chown dup2 dup3 environ euidaccess faccessat fchdir fchownat
+    fsync ftruncate getcwd getdomainname getdtablesize getgroups
+    gethostname getlogin getlogin_r getpagesize getusershell setusershell
+    endusershell lchown link linkat lseek pipe2 pread pwrite readlink
+    readlinkat rmdir sleep symlink symlinkat ttyname_r unlink unlinkat
+    usleep])
+])
+
+AC_DEFUN([gl_UNISTD_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_UNISTD_H_DEFAULTS],
+[
+  GNULIB_CHOWN=0;            AC_SUBST([GNULIB_CHOWN])
+  GNULIB_CLOSE=0;            AC_SUBST([GNULIB_CLOSE])
+  GNULIB_DUP2=0;             AC_SUBST([GNULIB_DUP2])
+  GNULIB_DUP3=0;             AC_SUBST([GNULIB_DUP3])
+  GNULIB_ENVIRON=0;          AC_SUBST([GNULIB_ENVIRON])
+  GNULIB_EUIDACCESS=0;       AC_SUBST([GNULIB_EUIDACCESS])
+  GNULIB_FACCESSAT=0;        AC_SUBST([GNULIB_FACCESSAT])
+  GNULIB_FCHDIR=0;           AC_SUBST([GNULIB_FCHDIR])
+  GNULIB_FCHOWNAT=0;         AC_SUBST([GNULIB_FCHOWNAT])
+  GNULIB_FSYNC=0;            AC_SUBST([GNULIB_FSYNC])
+  GNULIB_FTRUNCATE=0;        AC_SUBST([GNULIB_FTRUNCATE])
+  GNULIB_GETCWD=0;           AC_SUBST([GNULIB_GETCWD])
+  GNULIB_GETDOMAINNAME=0;    AC_SUBST([GNULIB_GETDOMAINNAME])
+  GNULIB_GETDTABLESIZE=0;    AC_SUBST([GNULIB_GETDTABLESIZE])
+  GNULIB_GETGROUPS=0;        AC_SUBST([GNULIB_GETGROUPS])
+  GNULIB_GETHOSTNAME=0;      AC_SUBST([GNULIB_GETHOSTNAME])
+  GNULIB_GETLOGIN=0;         AC_SUBST([GNULIB_GETLOGIN])
+  GNULIB_GETLOGIN_R=0;       AC_SUBST([GNULIB_GETLOGIN_R])
+  GNULIB_GETPAGESIZE=0;      AC_SUBST([GNULIB_GETPAGESIZE])
+  GNULIB_GETUSERSHELL=0;     AC_SUBST([GNULIB_GETUSERSHELL])
+  GNULIB_LCHOWN=0;           AC_SUBST([GNULIB_LCHOWN])
+  GNULIB_LINK=0;             AC_SUBST([GNULIB_LINK])
+  GNULIB_LINKAT=0;           AC_SUBST([GNULIB_LINKAT])
+  GNULIB_LSEEK=0;            AC_SUBST([GNULIB_LSEEK])
+  GNULIB_PIPE2=0;            AC_SUBST([GNULIB_PIPE2])
+  GNULIB_PREAD=0;            AC_SUBST([GNULIB_PREAD])
+  GNULIB_PWRITE=0;           AC_SUBST([GNULIB_PWRITE])
+  GNULIB_READLINK=0;         AC_SUBST([GNULIB_READLINK])
+  GNULIB_READLINKAT=0;       AC_SUBST([GNULIB_READLINKAT])
+  GNULIB_RMDIR=0;            AC_SUBST([GNULIB_RMDIR])
+  GNULIB_SLEEP=0;            AC_SUBST([GNULIB_SLEEP])
+  GNULIB_SYMLINK=0;          AC_SUBST([GNULIB_SYMLINK])
+  GNULIB_SYMLINKAT=0;        AC_SUBST([GNULIB_SYMLINKAT])
+  GNULIB_TTYNAME_R=0;        AC_SUBST([GNULIB_TTYNAME_R])
+  GNULIB_UNISTD_H_GETOPT=0;  AC_SUBST([GNULIB_UNISTD_H_GETOPT])
+  GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE])
+  GNULIB_UNLINK=0;           AC_SUBST([GNULIB_UNLINK])
+  GNULIB_UNLINKAT=0;         AC_SUBST([GNULIB_UNLINKAT])
+  GNULIB_USLEEP=0;           AC_SUBST([GNULIB_USLEEP])
+  GNULIB_WRITE=0;            AC_SUBST([GNULIB_WRITE])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_CHOWN=1;           AC_SUBST([HAVE_CHOWN])
+  HAVE_DUP2=1;            AC_SUBST([HAVE_DUP2])
+  HAVE_DUP3=1;            AC_SUBST([HAVE_DUP3])
+  HAVE_EUIDACCESS=1;      AC_SUBST([HAVE_EUIDACCESS])
+  HAVE_FACCESSAT=1;       AC_SUBST([HAVE_FACCESSAT])
+  HAVE_FCHDIR=1;          AC_SUBST([HAVE_FCHDIR])
+  HAVE_FCHOWNAT=1;        AC_SUBST([HAVE_FCHOWNAT])
+  HAVE_FSYNC=1;           AC_SUBST([HAVE_FSYNC])
+  HAVE_FTRUNCATE=1;       AC_SUBST([HAVE_FTRUNCATE])
+  HAVE_GETDOMAINNAME=1;   AC_SUBST([HAVE_GETDOMAINNAME])
+  HAVE_GETDTABLESIZE=1;   AC_SUBST([HAVE_GETDTABLESIZE])
+  HAVE_GETGROUPS=1;       AC_SUBST([HAVE_GETGROUPS])
+  HAVE_GETHOSTNAME=1;     AC_SUBST([HAVE_GETHOSTNAME])
+  HAVE_GETLOGIN=1;        AC_SUBST([HAVE_GETLOGIN])
+  HAVE_GETPAGESIZE=1;     AC_SUBST([HAVE_GETPAGESIZE])
+  HAVE_LCHOWN=1;          AC_SUBST([HAVE_LCHOWN])
+  HAVE_LINK=1;            AC_SUBST([HAVE_LINK])
+  HAVE_LINKAT=1;          AC_SUBST([HAVE_LINKAT])
+  HAVE_PIPE2=1;           AC_SUBST([HAVE_PIPE2])
+  HAVE_PREAD=1;           AC_SUBST([HAVE_PREAD])
+  HAVE_PWRITE=1;          AC_SUBST([HAVE_PWRITE])
+  HAVE_READLINK=1;        AC_SUBST([HAVE_READLINK])
+  HAVE_READLINKAT=1;      AC_SUBST([HAVE_READLINKAT])
+  HAVE_SLEEP=1;           AC_SUBST([HAVE_SLEEP])
+  HAVE_SYMLINK=1;         AC_SUBST([HAVE_SYMLINK])
+  HAVE_SYMLINKAT=1;       AC_SUBST([HAVE_SYMLINKAT])
+  HAVE_TTYNAME_R=1;       AC_SUBST([HAVE_TTYNAME_R])
+  HAVE_UNLINKAT=1;        AC_SUBST([HAVE_UNLINKAT])
+  HAVE_USLEEP=1;          AC_SUBST([HAVE_USLEEP])
+  HAVE_DECL_ENVIRON=1;    AC_SUBST([HAVE_DECL_ENVIRON])
+  HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
+  HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE])
+  HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL])
+  HAVE_OS_H=0;            AC_SUBST([HAVE_OS_H])
+  HAVE_SYS_PARAM_H=0;     AC_SUBST([HAVE_SYS_PARAM_H])
+  REPLACE_CHOWN=0;        AC_SUBST([REPLACE_CHOWN])
+  REPLACE_CLOSE=0;        AC_SUBST([REPLACE_CLOSE])
+  REPLACE_DUP=0;          AC_SUBST([REPLACE_DUP])
+  REPLACE_DUP2=0;         AC_SUBST([REPLACE_DUP2])
+  REPLACE_FCHOWNAT=0;     AC_SUBST([REPLACE_FCHOWNAT])
+  REPLACE_GETCWD=0;       AC_SUBST([REPLACE_GETCWD])
+  REPLACE_GETGROUPS=0;    AC_SUBST([REPLACE_GETGROUPS])
+  REPLACE_GETPAGESIZE=0;  AC_SUBST([REPLACE_GETPAGESIZE])
+  REPLACE_LCHOWN=0;       AC_SUBST([REPLACE_LCHOWN])
+  REPLACE_LINK=0;         AC_SUBST([REPLACE_LINK])
+  REPLACE_LINKAT=0;       AC_SUBST([REPLACE_LINKAT])
+  REPLACE_LSEEK=0;        AC_SUBST([REPLACE_LSEEK])
+  REPLACE_PREAD=0;        AC_SUBST([REPLACE_PREAD])
+  REPLACE_PWRITE=0;       AC_SUBST([REPLACE_PWRITE])
+  REPLACE_READLINK=0;     AC_SUBST([REPLACE_READLINK])
+  REPLACE_RMDIR=0;        AC_SUBST([REPLACE_RMDIR])
+  REPLACE_SLEEP=0;        AC_SUBST([REPLACE_SLEEP])
+  REPLACE_SYMLINK=0;      AC_SUBST([REPLACE_SYMLINK])
+  REPLACE_TTYNAME_R=0;    AC_SUBST([REPLACE_TTYNAME_R])
+  REPLACE_UNLINK=0;       AC_SUBST([REPLACE_UNLINK])
+  REPLACE_UNLINKAT=0;     AC_SUBST([REPLACE_UNLINKAT])
+  REPLACE_USLEEP=0;       AC_SUBST([REPLACE_USLEEP])
+  REPLACE_WRITE=0;        AC_SUBST([REPLACE_WRITE])
+  UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H])
+  UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0;
+                           AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS])
+])
diff --git a/gl/m4/valgrind-tests.m4 b/gl/m4/valgrind-tests.m4
new file mode 100644 (file)
index 0000000..e2434c6
--- /dev/null
@@ -0,0 +1,34 @@
+# valgrind-tests.m4 serial 1
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_VALGRIND_TESTS()
+# -------------------
+# Check if valgrind is available, and set VALGRIND to it if available.
+AC_DEFUN([gl_VALGRIND_TESTS],
+[
+  AC_ARG_ENABLE(valgrind-tests,
+    AS_HELP_STRING([--enable-valgrind-tests],
+                   [run self tests under valgrind]),
+    [opt_valgrind_tests=$enableval], [opt_valgrind_tests=yes])
+
+  # Run self-tests under valgrind?
+  if test "$opt_valgrind_tests" = "yes" && test "$cross_compiling" = no; then
+    AC_CHECK_PROGS(VALGRIND, valgrind)
+  fi
+
+  if test -n "$VALGRIND" && $VALGRIND -q true > /dev/null 2>&1; then
+    opt_valgrind_tests=yes
+    VALGRIND="$VALGRIND -q"
+  else
+    opt_valgrind_tests=no
+    VALGRIND=
+  fi
+
+  AC_MSG_CHECKING([whether self tests are run under valgrind])
+  AC_MSG_RESULT($opt_valgrind_tests)
+])
diff --git a/gl/m4/version-etc.m4 b/gl/m4/version-etc.m4
new file mode 100644 (file)
index 0000000..2c572b4
--- /dev/null
@@ -0,0 +1,33 @@
+# version-etc.m4 serial 1
+# Copyright (C) 2009-2010 Free Software Foundation, Inc.
+# This file 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.
+
+dnl $1 - configure flag and define name
+dnl $2 - human readable description
+m4_define([gl_VERSION_ETC_FLAG],
+[dnl
+  AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])],
+    [dnl
+      case $withval in
+        yes|no) ;;
+        *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;;
+      esac
+    ])
+])
+
+AC_DEFUN([gl_VERSION_ETC],
+[dnl
+  gl_VERSION_ETC_FLAG([packager],
+                      [String identifying the packager of this software])
+  gl_VERSION_ETC_FLAG([packager-version],
+                      [Packager-specific version information])
+  gl_VERSION_ETC_FLAG([packager-bug-reports],
+                      [Packager info for bug reports (URL/e-mail/...)])
+  if test "X$with_packager" = "X" && \
+     test "X$with_packager_version$with_packager_bug_reports" != "X"
+  then
+    AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager])
+  fi
+])
diff --git a/gl/m4/warn-on-use.m4 b/gl/m4/warn-on-use.m4
new file mode 100644 (file)
index 0000000..42daae8
--- /dev/null
@@ -0,0 +1,45 @@
+# warn-on-use.m4 serial 2
+dnl Copyright (C) 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
+# ---------------------------------------
+# For each whitespace-separated element in the list of NAMES, define
+# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
+# even after being undefined as a macro.
+#
+# See warn-on-use.h for some hints on how to poison function names, as
+# well as ideas on poisoning global variables and macros.  NAMES may
+# include global variables, but remember that only functions work with
+# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
+# header, but if the replacement header pulls in other headers because
+# some systems declare functions in the wrong header, then INCLUDES
+# should do likewise.
+#
+# If you assume C89, then it is generally safe to assume declarations
+# for functions declared in that standard (such as gets) without
+# needing gl_WARN_ON_USE_PREPARE.
+AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+[
+  m4_foreach_w([gl_decl], [$2],
+    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+       undefining macros.])])dnl
+  for gl_func in m4_flatten([$2]); do
+    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+      gl_Symbol,
+      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
+[@%:@undef $gl_func
+  (void) $gl_func;])],
+        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
+     AS_VAR_IF(gl_Symbol, [yes],
+       [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+       dnl shortcut - if the raw declaration exists, then set a cache
+       dnl variable to allow skipping any later AC_CHECK_DECL efforts
+       eval ac_cv_have_decl_$gl_func=yes])
+    AS_VAR_POPDEF([gl_Symbol])dnl
+  done
+])
diff --git a/gl/m4/warnings.m4 b/gl/m4/warnings.m4
new file mode 100644 (file)
index 0000000..dad5c1f
--- /dev/null
@@ -0,0 +1,36 @@
+# warnings.m4 serial 2
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# gl_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])],
+[m4_define([gl_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+# gl_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS])
+# ------------------------------------------------
+# Adds parameter to WARN_CFLAGS if the compiler supports it.  For example,
+# gl_WARN_ADD([-Wparentheses]).
+AC_DEFUN([gl_WARN_ADD],
+[AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_$1])dnl
+AC_CACHE_CHECK([whether compiler handles $1], [gl_Warn], [
+  save_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="${CPPFLAGS} $1"
+  AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])],
+                    [AS_VAR_SET([gl_Warn], [yes])],
+                    [AS_VAR_SET([gl_Warn], [no])])
+  CPPFLAGS="$save_CPPFLAGS"
+])
+AS_VAR_PUSHDEF([gl_Flags], m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]))dnl
+AS_VAR_IF([gl_Warn], [yes], [gl_AS_VAR_APPEND([gl_Flags], [" $1"])])
+AS_VAR_POPDEF([gl_Flags])dnl
+AS_VAR_POPDEF([gl_Warn])dnl
+m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl
+])
diff --git a/gl/m4/wchar_h.m4 b/gl/m4/wchar_h.m4
new file mode 100644 (file)
index 0000000..8cae82d
--- /dev/null
@@ -0,0 +1,152 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Eric Blake.
+
+# wchar_h.m4 serial 33
+
+AC_DEFUN([gl_WCHAR_H],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+  dnl Prepare for creating substitute <wchar.h>.
+  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+  dnl character support).
+  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  gl_CHECK_NEXT_HEADERS([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Some systems require additional headers.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+    ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
+    wcsrtombs wcsnrtombs wcwidth])
+])
+
+dnl Check whether <wchar.h> is usable at all.
+AC_DEFUN([gl_WCHAR_H_INLINE_OK],
+[
+  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
+  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
+  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
+  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
+    [gl_cv_header_wchar_h_correct_inline],
+    [gl_cv_header_wchar_h_correct_inline=yes
+     AC_LANG_CONFTEST([
+       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+]])])
+     if AC_TRY_EVAL([ac_compile]); then
+       mv conftest.$ac_objext conftest1.$ac_objext
+       AC_LANG_CONFTEST([
+         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+#include <wchar.h>
+int zero (void) { return 0; }
+]])])
+       if AC_TRY_EVAL([ac_compile]); then
+         mv conftest.$ac_objext conftest2.$ac_objext
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
+    ])
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted.])
+  fi
+])
+
+dnl Unconditionally enables the replacement of <wchar.h>.
+AC_DEFUN([gl_REPLACE_WCHAR_H],
+[
+  dnl This is a no-op, because <wchar.h> is always overridden.
+  :
+])
+
+AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+  GNULIB_BTOWC=0;      AC_SUBST([GNULIB_BTOWC])
+  GNULIB_WCTOB=0;      AC_SUBST([GNULIB_WCTOB])
+  GNULIB_MBSINIT=0;    AC_SUBST([GNULIB_MBSINIT])
+  GNULIB_MBRTOWC=0;    AC_SUBST([GNULIB_MBRTOWC])
+  GNULIB_MBRLEN=0;     AC_SUBST([GNULIB_MBRLEN])
+  GNULIB_MBSRTOWCS=0;  AC_SUBST([GNULIB_MBSRTOWCS])
+  GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS])
+  GNULIB_WCRTOMB=0;    AC_SUBST([GNULIB_WCRTOMB])
+  GNULIB_WCSRTOMBS=0;  AC_SUBST([GNULIB_WCSRTOMBS])
+  GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS])
+  GNULIB_WCWIDTH=0;    AC_SUBST([GNULIB_WCWIDTH])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
+  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
+  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
+  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
+  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
+  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
+  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
+  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
+  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
+  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
+  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
+  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
+  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
+  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
+  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
+  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
+  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
+  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
+  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
+  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
+  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
+  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
+  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
+])
diff --git a/gl/m4/wchar_t.m4 b/gl/m4/wchar_t.m4
new file mode 100644 (file)
index 0000000..ed804e6
--- /dev/null
@@ -0,0 +1,20 @@
+# wchar_t.m4 serial 3 (gettext-0.18)
+dnl Copyright (C) 2002-2003, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
+    [AC_TRY_COMPILE([#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';], ,
+       [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/gl/m4/wint_t.m4 b/gl/m4/wint_t.m4
new file mode 100644 (file)
index 0000000..a6c7d15
--- /dev/null
@@ -0,0 +1,28 @@
+# wint_t.m4 serial 4 (gettext-0.18)
+dnl Copyright (C) 2003, 2007-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
+    [AC_TRY_COMPILE([
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';], ,
+       [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
+  fi
+])
diff --git a/gl/progname.c b/gl/progname.c
new file mode 100644 (file)
index 0000000..1415e6a
--- /dev/null
@@ -0,0 +1,92 @@
+/* Program name management.
+   Copyright (C) 2001-2003, 2005-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+   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/>.  */
+
+
+#include <config.h>
+
+/* Specification.  */
+#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */
+#include "progname.h"
+
+#include <errno.h> /* get program_invocation_name declaration */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+/* String containing name the program is called with.
+   To be initialized by main().  */
+const char *program_name = NULL;
+
+/* Set program_name, based on argv[0].
+   argv0 must be a string allocated with indefinite extent, and must not be
+   modified after this call.  */
+void
+set_program_name (const char *argv0)
+{
+  /* libtool creates a temporary executable whose name is sometimes prefixed
+     with "lt-" (depends on the platform).  It also makes argv[0] absolute.
+     But the name of the temporary executable is a detail that should not be
+     visible to the end user and to the test suite.
+     Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here.  */
+  const char *slash;
+  const char *base;
+
+  /* Sanity check.  POSIX requires the invoking process to pass a non-NULL
+     argv[0].  */
+  if (argv0 == NULL)
+    {
+      /* It's a bug in the invoking program.  Help diagnosing it.  */
+      fputs ("A NULL argv[0] was passed through an exec system call.\n",
+             stderr);
+      abort ();
+    }
+
+  slash = strrchr (argv0, '/');
+  base = (slash != NULL ? slash + 1 : argv0);
+  if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0)
+    {
+      argv0 = base;
+      if (strncmp (base, "lt-", 3) == 0)
+        {
+          argv0 = base + 3;
+          /* On glibc systems, remove the "lt-" prefix from the variable
+             program_invocation_short_name.  */
+#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME
+          program_invocation_short_name = (char *) argv0;
+#endif
+        }
+    }
+
+  /* But don't strip off a leading <dirname>/ in general, because when the user
+     runs
+         /some/hidden/place/bin/cp foo foo
+     he should get the error message
+         /some/hidden/place/bin/cp: `foo' and `foo' are the same file
+     not
+         cp: `foo' and `foo' are the same file
+   */
+
+  program_name = argv0;
+
+  /* On glibc systems, the error() function comes from libc and uses the
+     variable program_invocation_name, not program_name.  So set this variable
+     as well.  */
+#if HAVE_DECL_PROGRAM_INVOCATION_NAME
+  program_invocation_name = (char *) argv0;
+#endif
+}
diff --git a/gl/progname.h b/gl/progname.h
new file mode 100644 (file)
index 0000000..5ba303b
--- /dev/null
@@ -0,0 +1,62 @@
+/* Program name management.
+   Copyright (C) 2001-2004, 2006, 2009-2010 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2001.
+
+   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/>.  */
+
+#ifndef _PROGNAME_H
+#define _PROGNAME_H
+
+/* Programs using this file should do the following in main():
+     set_program_name (argv[0]);
+ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* String containing name the program is called with.  */
+extern const char *program_name;
+
+/* Set program_name, based on argv[0].
+   argv0 must be a string allocated with indefinite extent, and must not be
+   modified after this call.  */
+extern void set_program_name (const char *argv0);
+
+#if ENABLE_RELOCATABLE
+
+/* Set program_name, based on argv[0], and original installation prefix and
+   directory, for relocatability.  */
+extern void set_program_name_and_installdir (const char *argv0,
+                                             const char *orig_installprefix,
+                                             const char *orig_installdir);
+#undef set_program_name
+#define set_program_name(ARG0) \
+  set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR)
+
+/* Return the full pathname of the current executable, based on the earlier
+   call to set_program_name_and_installdir.  Return NULL if unknown.  */
+extern char *get_full_program_name (void);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _PROGNAME_H */
diff --git a/gl/read-file.c b/gl/read-file.c
new file mode 100644 (file)
index 0000000..cc82bab
--- /dev/null
@@ -0,0 +1,136 @@
+/* read-file.c -- read file contents into a string
+   Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Bruno Haible.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#include <config.h>
+
+#include "read-file.h"
+
+/* Get realloc, free. */
+#include <stdlib.h>
+
+/* Get errno. */
+#include <errno.h>
+
+/* Read a STREAM and return a newly allocated string with the content,
+   and set *LENGTH to the length of the string.  The string is
+   zero-terminated, but the terminating zero byte is not counted in
+   *LENGTH.  On errors, *LENGTH is undefined, errno preserves the
+   values set by system functions (if any), and NULL is returned. */
+char *
+fread_file (FILE * stream, size_t * length)
+{
+  char *buf = NULL;
+  size_t alloc = 0;
+  size_t size = 0;
+  int save_errno;
+
+  for (;;)
+    {
+      size_t count;
+      size_t requested;
+
+      if (size + BUFSIZ + 1 > alloc)
+        {
+          char *new_buf;
+
+          alloc += alloc / 2;
+          if (alloc < size + BUFSIZ + 1)
+            alloc = size + BUFSIZ + 1;
+
+          new_buf = realloc (buf, alloc);
+          if (!new_buf)
+            {
+              save_errno = errno;
+              break;
+            }
+
+          buf = new_buf;
+        }
+
+      requested = alloc - size - 1;
+      count = fread (buf + size, 1, requested, stream);
+      size += count;
+
+      if (count != requested)
+        {
+          save_errno = errno;
+          if (ferror (stream))
+            break;
+          buf[size] = '\0';
+          *length = size;
+          return buf;
+        }
+    }
+
+  free (buf);
+  errno = save_errno;
+  return NULL;
+}
+
+static char *
+internal_read_file (const char *filename, size_t * length, const char *mode)
+{
+  FILE *stream = fopen (filename, mode);
+  char *out;
+  int save_errno;
+
+  if (!stream)
+    return NULL;
+
+  out = fread_file (stream, length);
+
+  save_errno = errno;
+
+  if (fclose (stream) != 0)
+    {
+      if (out)
+        {
+          save_errno = errno;
+          free (out);
+        }
+      errno = save_errno;
+      return NULL;
+    }
+
+  return out;
+}
+
+/* Open and read the contents of FILENAME, and return a newly
+   allocated string with the content, and set *LENGTH to the length of
+   the string.  The string is zero-terminated, but the terminating
+   zero byte is not counted in *LENGTH.  On errors, *LENGTH is
+   undefined, errno preserves the values set by system functions (if
+   any), and NULL is returned.  */
+char *
+read_file (const char *filename, size_t * length)
+{
+  return internal_read_file (filename, length, "r");
+}
+
+/* Open (on non-POSIX systems, in binary mode) and read the contents
+   of FILENAME, and return a newly allocated string with the content,
+   and set LENGTH to the length of the string.  The string is
+   zero-terminated, but the terminating zero byte is not counted in
+   the LENGTH variable.  On errors, *LENGTH is undefined, errno
+   preserves the values set by system functions (if any), and NULL is
+   returned.  */
+char *
+read_binary_file (const char *filename, size_t * length)
+{
+  return internal_read_file (filename, length, "rb");
+}
diff --git a/gl/read-file.h b/gl/read-file.h
new file mode 100644 (file)
index 0000000..8b6ae43
--- /dev/null
@@ -0,0 +1,34 @@
+/* read-file.h -- read file contents into a string
+   Copyright (C) 2006, 2009, 2010 Free Software Foundation, Inc.
+   Written by Simon Josefsson.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef READ_FILE_H
+#define READ_FILE_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get FILE.  */
+#include <stdio.h>
+
+extern char *fread_file (FILE * stream, size_t * length);
+
+extern char *read_file (const char *filename, size_t * length);
+
+extern char *read_binary_file (const char *filename, size_t * length);
+
+#endif /* READ_FILE_H */
diff --git a/gl/realloc.c b/gl/realloc.c
new file mode 100644 (file)
index 0000000..36aeecc
--- /dev/null
@@ -0,0 +1,88 @@
+/* realloc() function that is glibc compatible.
+
+   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2010 Free Software
+   Foundation, Inc.
+
+   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/>.  */
+
+/* written by Jim Meyering and Bruno Haible */
+
+#include <config.h>
+
+/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h.  */
+#ifdef realloc
+# define NEED_REALLOC_GNU 1
+#endif
+
+/* Infer the properties of the system's malloc function.
+   Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h.  */
+#if GNULIB_MALLOC_GNU && !defined malloc
+# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1
+#endif
+
+/* Below we want to call the system's malloc and realloc.
+   Undefine the symbols here so that including <stdlib.h> provides a
+   declaration of malloc(), not of rpl_malloc(), and likewise for realloc.  */
+#undef malloc
+#undef realloc
+
+/* Specification.  */
+#include <stdlib.h>
+
+#include <errno.h>
+
+/* Below we want to call the system's malloc and realloc.
+   Undefine the symbols, if they were defined by gnulib's <stdlib.h>
+   replacement.  */
+#undef malloc
+#undef realloc
+
+/* Change the size of an allocated block of memory P to N bytes,
+   with error checking.  If N is zero, change it to 1.  If P is NULL,
+   use malloc.  */
+
+void *
+rpl_realloc (void *p, size_t n)
+{
+  void *result;
+
+#if NEED_REALLOC_GNU
+  if (n == 0)
+    {
+      n = 1;
+
+      /* In theory realloc might fail, so don't rely on it to free.  */
+      free (p);
+      p = NULL;
+    }
+#endif
+
+  if (p == NULL)
+    {
+#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE
+      if (n == 0)
+        n = 1;
+#endif
+      result = malloc (n);
+    }
+  else
+    result = realloc (p, n);
+
+#if !HAVE_REALLOC_POSIX
+  if (result == NULL)
+    errno = ENOMEM;
+#endif
+
+  return result;
+}
diff --git a/gl/stdarg.in.h b/gl/stdarg.in.h
new file mode 100644 (file)
index 0000000..3e0c49d
--- /dev/null
@@ -0,0 +1,35 @@
+/* Substitute for and wrapper around <stdarg.h>.
+   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_STDARG_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDARG_H@
+
+#ifndef _GL_STDARG_H
+#define _GL_STDARG_H
+
+#ifndef va_copy
+# define va_copy(a,b) ((a) = (b))
+#endif
+
+#endif /* _GL_STDARG_H */
+#endif /* _GL_STDARG_H */
diff --git a/gl/stddef.in.h b/gl/stddef.in.h
new file mode 100644 (file)
index 0000000..08778a2
--- /dev/null
@@ -0,0 +1,86 @@
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * POSIX 2008 <stddef.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_wchar_t || defined __need_size_t  \
+  || defined __need_ptrdiff_t || defined __need_NULL \
+  || defined __need_wint_t
+/* Special invocation convention inside gcc header files.  In
+   particular, gcc provides a version of <stddef.h> that blindly
+   redefines NULL even when __need_wint_t was defined, even though
+   wint_t is not normally provided by <stddef.h>.  Hence, we must
+   remember if special invocation has ever been used to obtain wint_t,
+   in which case we need to clean up NULL yet again.  */
+
+# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T)
+#  ifdef __need_wint_t
+#   undef _GL_STDDEF_H
+#   define _GL_STDDEF_WINT_T
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+# endif
+
+#else
+/* Normal invocation convention.  */
+
+# ifndef _GL_STDDEF_H
+
+/* The include_next requires a split double-inclusion guard.  */
+
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+#  ifndef _GL_STDDEF_H
+#   define _GL_STDDEF_H
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+#if @REPLACE_NULL@
+# undef NULL
+# ifdef __cplusplus
+   /* ISO C++ says that the macro NULL must expand to an integer constant
+      expression, hence '((void *) 0)' is not allowed in C++.  */
+#  if __GNUG__ >= 3
+    /* GNU C++ has a __null macro that behaves like an integer ('int' or
+       'long') but has the same size as a pointer.  Use that, to avoid
+       warnings.  */
+#   define NULL __null
+#  else
+#   define NULL 0L
+#  endif
+# else
+#  define NULL ((void *) 0)
+# endif
+#endif
+
+/* Some platforms lack wchar_t.  */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+#  endif /* _GL_STDDEF_H */
+# endif /* _GL_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/gl/stdint.in.h b/gl/stdint.in.h
new file mode 100644 (file)
index 0000000..5da5f17
--- /dev/null
@@ -0,0 +1,568 @@
+/* Copyright (C) 2001-2002, 2004-2010 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _GL_STDINT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _GL_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _GL_STDINT_H
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after @NEXT_STDINT_H@.  */
+#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+# include <sys/types.h>
+#endif
+
+/* Get LONG_MIN, LONG_MAX, ULONG_MAX.  */
+#include <limits.h>
+
+#if @HAVE_INTTYPES_H@
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+# include <inttypes.h>
+#elif @HAVE_SYS_INTTYPES_H@
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+# include <sys/inttypes.h>
+#endif
+
+#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+# include <sys/bitypes.h>
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for a integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+#define _STDINT_MIN(signed, bits, zero) \
+  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
+
+#define _STDINT_MAX(signed, bits, zero) \
+  ((signed) \
+   ? ~ _STDINT_MIN (signed, bits, zero) \
+   : /* The expression for the unsigned case.  The subtraction of (signed) \
+        is a nop in the unsigned case and avoids "signed integer overflow" \
+        warnings in the signed case.  */ \
+     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef int8_t
+#undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+#define int8_t gl_int8_t
+#define uint8_t gl_uint8_t
+
+#undef int16_t
+#undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+#define int16_t gl_int16_t
+#define uint16_t gl_uint16_t
+
+#undef int32_t
+#undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+#define int32_t gl_int32_t
+#define uint32_t gl_uint32_t
+
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+#if LONG_MAX >> 31 >> 31 == 1
+# undef int64_t
+typedef long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#elif defined _MSC_VER
+# undef int64_t
+typedef __int64 gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#elif @HAVE_LONG_LONG_INT@
+# undef int64_t
+typedef long long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#endif
+
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# undef uint64_t
+typedef unsigned long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#elif defined _MSC_VER
+# undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+#define _UINT8_T
+#define _UINT32_T
+#define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef int_least8_t
+#undef uint_least8_t
+#undef int_least16_t
+#undef uint_least16_t
+#undef int_least32_t
+#undef uint_least32_t
+#undef int_least64_t
+#undef uint_least64_t
+#define int_least8_t int8_t
+#define uint_least8_t uint8_t
+#define int_least16_t int16_t
+#define uint_least16_t uint16_t
+#define int_least32_t int32_t
+#define uint_least32_t uint32_t
+#ifdef GL_INT64_T
+# define int_least64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+#endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  Assume that 'long int'
+   is fast enough for all narrower integers.  */
+
+#undef int_fast8_t
+#undef uint_fast8_t
+#undef int_fast16_t
+#undef uint_fast16_t
+#undef int_fast32_t
+#undef uint_fast32_t
+#undef int_fast64_t
+#undef uint_fast64_t
+typedef long int gl_int_fast8_t;
+typedef unsigned long int gl_uint_fast8_t;
+typedef long int gl_int_fast16_t;
+typedef unsigned long int gl_uint_fast16_t;
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+#define int_fast8_t gl_int_fast8_t
+#define uint_fast8_t gl_uint_fast8_t
+#define int_fast16_t gl_int_fast16_t
+#define uint_fast16_t gl_uint_fast16_t
+#define int_fast32_t gl_int_fast32_t
+#define uint_fast32_t gl_uint_fast32_t
+#ifdef GL_INT64_T
+# define int_fast64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+#endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+#undef intptr_t
+#undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+#define intptr_t gl_intptr_t
+#define uintptr_t gl_uintptr_t
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+#undef intmax_t
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+#elif defined GL_INT64_T
+# define intmax_t int64_t
+#else
+typedef long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+#endif
+
+#undef uintmax_t
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+#elif defined GL_UINT64_T
+# define uintmax_t uint64_t
+#else
+typedef unsigned long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+#endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
+
+/* 7.18.2. Limits of specified-width integer types */
+
+#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef INT8_MIN
+#undef INT8_MAX
+#undef UINT8_MAX
+#define INT8_MIN  (~ INT8_MAX)
+#define INT8_MAX  127
+#define UINT8_MAX  255
+
+#undef INT16_MIN
+#undef INT16_MAX
+#undef UINT16_MAX
+#define INT16_MIN  (~ INT16_MAX)
+#define INT16_MAX  32767
+#define UINT16_MAX  65535
+
+#undef INT32_MIN
+#undef INT32_MAX
+#undef UINT32_MAX
+#define INT32_MIN  (~ INT32_MAX)
+#define INT32_MAX  2147483647
+#define UINT32_MAX  4294967295U
+
+#undef INT64_MIN
+#undef INT64_MAX
+#ifdef GL_INT64_T
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+# define INT64_MIN  (- INTMAX_C (1) << 63)
+# define INT64_MAX  INTMAX_C (9223372036854775807)
+#endif
+
+#undef UINT64_MAX
+#ifdef GL_UINT64_T
+# define UINT64_MAX  UINTMAX_C (18446744073709551615)
+#endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef INT_LEAST8_MIN
+#undef INT_LEAST8_MAX
+#undef UINT_LEAST8_MAX
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX  UINT8_MAX
+
+#undef INT_LEAST16_MIN
+#undef INT_LEAST16_MAX
+#undef UINT_LEAST16_MAX
+#define INT_LEAST16_MIN  INT16_MIN
+#define INT_LEAST16_MAX  INT16_MAX
+#define UINT_LEAST16_MAX  UINT16_MAX
+
+#undef INT_LEAST32_MIN
+#undef INT_LEAST32_MAX
+#undef UINT_LEAST32_MAX
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX  UINT32_MAX
+
+#undef INT_LEAST64_MIN
+#undef INT_LEAST64_MAX
+#ifdef GL_INT64_T
+# define INT_LEAST64_MIN  INT64_MIN
+# define INT_LEAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_LEAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+#undef INT_FAST8_MIN
+#undef INT_FAST8_MAX
+#undef UINT_FAST8_MAX
+#define INT_FAST8_MIN  LONG_MIN
+#define INT_FAST8_MAX  LONG_MAX
+#define UINT_FAST8_MAX  ULONG_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN  LONG_MIN
+#define INT_FAST16_MAX  LONG_MAX
+#define UINT_FAST16_MAX  ULONG_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#define INT_FAST32_MIN  LONG_MIN
+#define INT_FAST32_MAX  LONG_MAX
+#define UINT_FAST32_MAX  ULONG_MAX
+
+#undef INT_FAST64_MIN
+#undef INT_FAST64_MAX
+#ifdef GL_INT64_T
+# define INT_FAST64_MIN  INT64_MIN
+# define INT_FAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_FAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_FAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+#undef INTPTR_MIN
+#undef INTPTR_MAX
+#undef UINTPTR_MAX
+#define INTPTR_MIN  LONG_MIN
+#define INTPTR_MAX  LONG_MAX
+#define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+#undef INTMAX_MIN
+#undef INTMAX_MAX
+#ifdef INT64_MAX
+# define INTMAX_MIN  INT64_MIN
+# define INTMAX_MAX  INT64_MAX
+#else
+# define INTMAX_MIN  INT32_MIN
+# define INTMAX_MAX  INT32_MAX
+#endif
+
+#undef UINTMAX_MAX
+#ifdef UINT64_MAX
+# define UINTMAX_MAX  UINT64_MAX
+#else
+# define UINTMAX_MAX  UINT32_MAX
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+# else
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+# endif
+#else
+# define PTRDIFF_MIN  \
+    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# define PTRDIFF_MAX  \
+    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+#endif
+
+/* sig_atomic_t limits */
+#undef SIG_ATOMIC_MIN
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+#define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+#undef SIZE_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+# endif
+#else
+# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+#endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested
+   includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+#if ! (defined WCHAR_MIN && defined WCHAR_MAX)
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#endif
+#undef WCHAR_MIN
+#undef WCHAR_MAX
+#define WCHAR_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+#define WCHAR_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+#undef WINT_MIN
+#undef WINT_MAX
+#define WINT_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+#define WINT_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+
+#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
+
+/* 7.18.4. Macros for integer constants */
+
+#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+#undef INT8_C
+#undef UINT8_C
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#undef INT16_C
+#undef UINT16_C
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#undef INT32_C
+#undef UINT32_C
+#define INT32_C(x) x
+#define UINT32_C(x) x ## U
+
+#undef INT64_C
+#undef UINT64_C
+#if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+#elif defined _MSC_VER
+# define INT64_C(x) x##i64
+#elif @HAVE_LONG_LONG_INT@
+# define INT64_C(x) x##LL
+#endif
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+#elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# define UINT64_C(x) x##ULL
+#endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+#undef INTMAX_C
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+# define INTMAX_C(x)   x##LL
+#elif defined GL_INT64_T
+# define INTMAX_C(x)   INT64_C(x)
+#else
+# define INTMAX_C(x)   x##L
+#endif
+
+#undef UINTMAX_C
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+# define UINTMAX_C(x)  x##ULL
+#elif defined GL_UINT64_T
+# define UINTMAX_C(x)  UINT64_C(x)
+#else
+# define UINTMAX_C(x)  x##UL
+#endif
+
+#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
+
+#endif /* _GL_STDINT_H */
+#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/gl/stdlib.in.h b/gl/stdlib.in.h
new file mode 100644 (file)
index 0000000..d74c251
--- /dev/null
@@ -0,0 +1,687 @@
+/* A GNU-like <stdlib.h>.
+
+   Copyright (C) 1995, 2001-2004, 2006-2010 Free Software Foundation, Inc.
+
+   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/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_malloc_and_calloc
+/* Special invocation convention inside glibc header files.  */
+
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_STDLIB_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDLIB_H@
+
+#ifndef _GL_STDLIB_H
+#define _GL_STDLIB_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* Solaris declares getloadavg() in <sys/loadavg.h>.  */
+#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@
+# include <sys/loadavg.h>
+#endif
+
+/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included
+   from <stdlib.h> if _REENTRANT is defined.  Include it always.  */
+#if @HAVE_RANDOM_H@
+# include <random.h>
+#endif
+
+#if !@HAVE_STRUCT_RANDOM_DATA@ || (@GNULIB_RANDOM_R@ && !@HAVE_RANDOM_R@) \
+    || defined GNULIB_POSIXCHECK
+# include <stdint.h>
+#endif
+
+#if !@HAVE_STRUCT_RANDOM_DATA@
+struct random_data
+{
+  int32_t *fptr;                /* Front pointer.  */
+  int32_t *rptr;                /* Rear pointer.  */
+  int32_t *state;               /* Array of state values.  */
+  int rand_type;                /* Type of random number generator.  */
+  int rand_deg;                 /* Degree of random number generator.  */
+  int rand_sep;                 /* Distance between front and rear.  */
+  int32_t *end_ptr;             /* Pointer behind state table.  */
+};
+#endif
+
+#if (@GNULIB_MKSTEMP@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)
+/* On MacOS X 10.3, only <unistd.h> declares mkstemp.  */
+/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt.  */
+/* But avoid namespace pollution on glibc systems and native Windows.  */
+# include <unistd.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Some systems do not define EXIT_*, despite otherwise supporting C89.  */
+#ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+#endif
+/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere
+   with proper operation of xargs.  */
+#ifndef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#elif EXIT_FAILURE != 1
+# undef EXIT_FAILURE
+# define EXIT_FAILURE 1
+#endif
+
+
+#if @GNULIB_ATOLL@
+/* Parse a signed decimal integer.
+   Returns the value of the integer.  Errors are not detected.  */
+# if !@HAVE_ATOLL@
+_GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (atoll, long long, (const char *string));
+_GL_CXXALIASWARN (atoll);
+#elif defined GNULIB_POSIXCHECK
+# undef atoll
+# if HAVE_RAW_DECL_ATOLL
+_GL_WARN_ON_USE (atoll, "atoll is unportable - "
+                 "use gnulib module atoll for portability");
+# endif
+#endif
+
+#if @GNULIB_CALLOC_POSIX@
+# if !@HAVE_CALLOC_POSIX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef calloc
+#   define calloc rpl_calloc
+#  endif
+_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size));
+_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size));
+# else
+_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
+# endif
+_GL_CXXALIASWARN (calloc);
+#elif defined GNULIB_POSIXCHECK
+# undef calloc
+/* Assume calloc is always declared.  */
+_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - "
+                 "use gnulib module calloc-posix for portability");
+#endif
+
+#if @GNULIB_CANONICALIZE_FILE_NAME@
+# if @REPLACE_CANONICALIZE_FILE_NAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define canonicalize_file_name rpl_canonicalize_file_name
+#  endif
+_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
+# else
+#  if !@HAVE_CANONICALIZE_FILE_NAME@
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name)
+                                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
+# endif
+_GL_CXXALIASWARN (canonicalize_file_name);
+#elif defined GNULIB_POSIXCHECK
+# undef canonicalize_file_name
+# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME
+_GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - "
+                 "use gnulib module canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLOADAVG@
+/* Store max(NELEM,3) load average numbers in LOADAVG[].
+   The three numbers are the load average of the last 1 minute, the last 5
+   minutes, and the last 15 minutes, respectively.
+   LOADAVG is an array of NELEM numbers.  */
+# if !@HAVE_DECL_GETLOADAVG@
+_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem));
+_GL_CXXALIASWARN (getloadavg);
+#elif defined GNULIB_POSIXCHECK
+# undef getloadavg
+# if HAVE_RAW_DECL_GETLOADAVG
+_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - "
+                 "use gnulib module getloadavg for portability");
+# endif
+#endif
+
+#if @GNULIB_GETSUBOPT@
+/* Assuming *OPTIONP is a comma separated list of elements of the form
+   "token" or "token=value", getsubopt parses the first of these elements.
+   If the first element refers to a "token" that is member of the given
+   NULL-terminated array of tokens:
+     - It replaces the comma with a NUL byte, updates *OPTIONP to point past
+       the first option and the comma, sets *VALUEP to the value of the
+       element (or NULL if it doesn't contain an "=" sign),
+     - It returns the index of the "token" in the given array of tokens.
+   Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined.
+   For more details see the POSIX:2001 specification.
+   http://www.opengroup.org/susv3xsh/getsubopt.html */
+# if !@HAVE_GETSUBOPT@
+_GL_FUNCDECL_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+# endif
+_GL_CXXALIAS_SYS (getsubopt, int,
+                  (char **optionp, char *const *tokens, char **valuep));
+_GL_CXXALIASWARN (getsubopt);
+#elif defined GNULIB_POSIXCHECK
+# undef getsubopt
+# if HAVE_RAW_DECL_GETSUBOPT
+_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - "
+                 "use gnulib module getsubopt for portability");
+# endif
+#endif
+
+#if @GNULIB_GRANTPT@
+/* Change the ownership and access permission of the slave side of the
+   pseudo-terminal whose master side is specified by FD.  */
+# if !@HAVE_GRANTPT@
+_GL_FUNCDECL_SYS (grantpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (grantpt, int, (int fd));
+_GL_CXXALIASWARN (grantpt);
+#elif defined GNULIB_POSIXCHECK
+# undef grantpt
+# if HAVE_RAW_DECL_GRANTPT
+_GL_WARN_ON_USE (ptsname, "grantpt is not portable - "
+                 "use gnulib module grantpt for portability");
+# endif
+#endif
+
+#if @GNULIB_MALLOC_POSIX@
+# if !@HAVE_MALLOC_POSIX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef malloc
+#   define malloc rpl_malloc
+#  endif
+_GL_FUNCDECL_RPL (malloc, void *, (size_t size));
+_GL_CXXALIAS_RPL (malloc, void *, (size_t size));
+# else
+_GL_CXXALIAS_SYS (malloc, void *, (size_t size));
+# endif
+_GL_CXXALIASWARN (malloc);
+#elif defined GNULIB_POSIXCHECK
+# undef malloc
+/* Assume malloc is always declared.  */
+_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - "
+                 "use gnulib module malloc-posix for portability");
+#endif
+
+#if @GNULIB_MKDTEMP@
+/* Create a unique temporary directory from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the directory name unique.
+   Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+   The directory is created mode 700.  */
+# if !@HAVE_MKDTEMP@
+_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/));
+_GL_CXXALIASWARN (mkdtemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkdtemp
+# if HAVE_RAW_DECL_MKDTEMP
+_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - "
+                 "use gnulib module mkdtemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKOSTEMP@
+_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemp
+# if HAVE_RAW_DECL_MKOSTEMP
+_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - "
+                 "use gnulib module mkostemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKOSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE before a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   The file is then created, with the specified flags, ensuring it didn't exist
+   before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKOSTEMPS@
+_GL_FUNCDECL_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkostemps, int,
+                  (char * /*template*/, int /*suffixlen*/, int /*flags*/));
+_GL_CXXALIASWARN (mkostemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkostemps
+# if HAVE_RAW_DECL_MKOSTEMPS
+_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - "
+                 "use gnulib module mkostemps for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMP@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if @REPLACE_MKSTEMP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mkstemp rpl_mkstemp
+#  endif
+_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/));
+# else
+#  if ! @HAVE_MKSTEMP@
+_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/));
+# endif
+_GL_CXXALIASWARN (mkstemp);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemp
+# if HAVE_RAW_DECL_MKSTEMP
+_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - "
+                 "use gnulib module mkstemp for portability");
+# endif
+#endif
+
+#if @GNULIB_MKSTEMPS@
+/* Create a unique temporary file from TEMPLATE.
+   The last six characters of TEMPLATE prior to a suffix of length
+   SUFFIXLEN must be "XXXXXX";
+   they are replaced with a string that makes the file name unique.
+   The file is then created, ensuring it didn't exist before.
+   The file is created read-write (mask at least 0600 & ~umask), but it may be
+   world-readable and world-writable (mask 0666 & ~umask), depending on the
+   implementation.
+   Returns the open file descriptor if successful, otherwise -1 and errno
+   set.  */
+# if !@HAVE_MKSTEMPS@
+_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)
+                                 _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/));
+_GL_CXXALIASWARN (mkstemps);
+#elif defined GNULIB_POSIXCHECK
+# undef mkstemps
+# if HAVE_RAW_DECL_MKSTEMPS
+_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - "
+                 "use gnulib module mkstemps for portability");
+# endif
+#endif
+
+#if @GNULIB_PTSNAME@
+/* Return the pathname of the pseudo-terminal slave associated with
+   the master FD is open on, or NULL on errors.  */
+# if !@HAVE_PTSNAME@
+_GL_FUNCDECL_SYS (ptsname, char *, (int fd));
+# endif
+_GL_CXXALIAS_SYS (ptsname, char *, (int fd));
+_GL_CXXALIASWARN (ptsname);
+#elif defined GNULIB_POSIXCHECK
+# undef ptsname
+# if HAVE_RAW_DECL_PTSNAME
+_GL_WARN_ON_USE (ptsname, "ptsname is not portable - "
+                 "use gnulib module ptsname for portability");
+# endif
+#endif
+
+#if @GNULIB_PUTENV@
+# if @REPLACE_PUTENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putenv
+#   define putenv rpl_putenv
+#  endif
+_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (putenv, int, (char *string));
+# else
+_GL_CXXALIAS_SYS (putenv, int, (char *string));
+# endif
+_GL_CXXALIASWARN (putenv);
+#endif
+
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+#  ifndef RAND_MAX
+#   define RAND_MAX 2147483647
+#  endif
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result)
+                                 _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result));
+_GL_CXXALIASWARN (random_r);
+#elif defined GNULIB_POSIXCHECK
+# undef random_r
+# if HAVE_RAW_DECL_RANDOM_R
+_GL_WARN_ON_USE (random_r, "random_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (srandom_r, int,
+                  (unsigned int seed, struct random_data *rand_state));
+_GL_CXXALIASWARN (srandom_r);
+#elif defined GNULIB_POSIXCHECK
+# undef srandom_r
+# if HAVE_RAW_DECL_SRANDOM_R
+_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((2, 4)));
+# endif
+_GL_CXXALIAS_SYS (initstate_r, int,
+                  (unsigned int seed, char *buf, size_t buf_size,
+                   struct random_data *rand_state));
+_GL_CXXALIASWARN (initstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef initstate_r
+# if HAVE_RAW_DECL_INITSTATE_R
+_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+#if @GNULIB_RANDOM_R@
+# if !@HAVE_RANDOM_R@
+_GL_FUNCDECL_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (setstate_r, int,
+                  (char *arg_state, struct random_data *rand_state));
+_GL_CXXALIASWARN (setstate_r);
+#elif defined GNULIB_POSIXCHECK
+# undef setstate_r
+# if HAVE_RAW_DECL_SETSTATE_R
+_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - "
+                 "use gnulib module random_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REALLOC_POSIX@
+# if !@HAVE_REALLOC_POSIX@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef realloc
+#   define realloc rpl_realloc
+#  endif
+_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size));
+_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size));
+# else
+_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
+# endif
+_GL_CXXALIASWARN (realloc);
+#elif defined GNULIB_POSIXCHECK
+# undef realloc
+/* Assume realloc is always declared.  */
+_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - "
+                 "use gnulib module realloc-posix for portability");
+#endif
+
+#if @GNULIB_REALPATH@
+# if @REPLACE_REALPATH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define realpath rpl_realpath
+#  endif
+_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved));
+# else
+#  if !@HAVE_REALPATH@
+_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved));
+# endif
+_GL_CXXALIASWARN (realpath);
+#elif defined GNULIB_POSIXCHECK
+# undef realpath
+# if HAVE_RAW_DECL_REALPATH
+_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module "
+                 "canonicalize or canonicalize-lgpl for portability");
+# endif
+#endif
+
+#if @GNULIB_RPMATCH@
+/* Test a user response to a question.
+   Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear.  */
+# if !@HAVE_RPMATCH@
+_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (rpmatch, int, (const char *response));
+_GL_CXXALIASWARN (rpmatch);
+#elif defined GNULIB_POSIXCHECK
+# undef rpmatch
+# if HAVE_RAW_DECL_RPMATCH
+_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - "
+                 "use gnulib module rpmatch for portability");
+# endif
+#endif
+
+#if @GNULIB_SETENV@
+/* Set NAME to VALUE in the environment.
+   If REPLACE is nonzero, overwrite an existing value.  */
+# if @REPLACE_SETENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef setenv
+#   define setenv rpl_setenv
+#  endif
+_GL_FUNCDECL_RPL (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (setenv, int,
+                  (const char *name, const char *value, int replace));
+# else
+#  if !@HAVE_SETENV@
+_GL_FUNCDECL_SYS (setenv, int,
+                  (const char *name, const char *value, int replace)
+                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (setenv, int,
+                  (const char *name, const char *value, int replace));
+# endif
+_GL_CXXALIASWARN (setenv);
+#elif defined GNULIB_POSIXCHECK
+# undef setenv
+# if HAVE_RAW_DECL_SETENV
+_GL_WARN_ON_USE (setenv, "setenv is unportable - "
+                 "use gnulib module setenv for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOD@
+ /* Parse a double from STRING, updating ENDP if appropriate.  */
+# if @REPLACE_STRTOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strtod rpl_strtod
+#  endif
+_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp));
+# else
+#  if !@HAVE_STRTOD@
+_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp)
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp));
+# endif
+_GL_CXXALIASWARN (strtod);
+#elif defined GNULIB_POSIXCHECK
+# undef strtod
+# if HAVE_RAW_DECL_STRTOD
+_GL_WARN_ON_USE (strtod, "strtod is unportable - "
+                 "use gnulib module strtod for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOLL@
+/* Parse a signed integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set
+   to ERANGE.  */
+# if !@HAVE_STRTOLL@
+_GL_FUNCDECL_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoll, long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoll);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoll
+# if HAVE_RAW_DECL_STRTOLL
+_GL_WARN_ON_USE (strtoll, "strtoll is unportable - "
+                 "use gnulib module strtoll for portability");
+# endif
+#endif
+
+#if @GNULIB_STRTOULL@
+/* Parse an unsigned integer whose textual representation starts at STRING.
+   The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0,
+   it may be decimal or octal (with prefix "0") or hexadecimal (with prefix
+   "0x").
+   If ENDPTR is not NULL, the address of the first byte after the integer is
+   stored in *ENDPTR.
+   Upon overflow, the return value is ULLONG_MAX, and errno is set to
+   ERANGE.  */
+# if !@HAVE_STRTOULL@
+_GL_FUNCDECL_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base)
+                  _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (strtoull, unsigned long long,
+                  (const char *string, char **endptr, int base));
+_GL_CXXALIASWARN (strtoull);
+#elif defined GNULIB_POSIXCHECK
+# undef strtoull
+# if HAVE_RAW_DECL_STRTOULL
+_GL_WARN_ON_USE (strtoull, "strtoull is unportable - "
+                 "use gnulib module strtoull for portability");
+# endif
+#endif
+
+#if @GNULIB_UNLOCKPT@
+/* Unlock the slave side of the pseudo-terminal whose master side is specified
+   by FD, so that it can be opened.  */
+# if !@HAVE_UNLOCKPT@
+_GL_FUNCDECL_SYS (unlockpt, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (unlockpt, int, (int fd));
+_GL_CXXALIASWARN (unlockpt);
+#elif defined GNULIB_POSIXCHECK
+# undef unlockpt
+# if HAVE_RAW_DECL_UNLOCKPT
+_GL_WARN_ON_USE (ptsname, "unlockpt is not portable - "
+                 "use gnulib module unlockpt for portability");
+# endif
+#endif
+
+#if @GNULIB_UNSETENV@
+/* Remove the variable NAME from the environment.  */
+# if @REPLACE_UNSETENV@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unsetenv
+#   define unsetenv rpl_unsetenv
+#  endif
+_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unsetenv, int, (const char *name));
+# else
+#  if !@HAVE_UNSETENV@
+_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (unsetenv, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (unsetenv);
+#elif defined GNULIB_POSIXCHECK
+# undef unsetenv
+# if HAVE_RAW_DECL_UNSETENV
+_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - "
+                 "use gnulib module unsetenv for portability");
+# endif
+#endif
+
+
+#endif /* _GL_STDLIB_H */
+#endif /* _GL_STDLIB_H */
+#endif
diff --git a/gl/unistd.in.h b/gl/unistd.in.h
new file mode 100644 (file)
index 0000000..7914f22
--- /dev/null
@@ -0,0 +1,1326 @@
+/* Substitute for and wrapper around <unistd.h>.
+   Copyright (C) 2003-2010 Free Software Foundation, Inc.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* Special invocation convention:
+   - On mingw, several headers, including <winsock2.h>, include <unistd.h>,
+     but we need to ensure that both the system <unistd.h> and <winsock2.h>
+     are completely included before we replace gethostname.  */
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
+  && !defined _GL_WINSOCK2_H_WITNESS && defined _WINSOCK2_H
+/* <unistd.h> is being indirectly included for the first time from
+   <winsock2.h>; avoid declaring any overrides.  */
+# if @HAVE_UNISTD_H@
+#  @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+# else
+#  error unexpected; report this to bug-gnulib@gnu.org
+# endif
+# define _GL_WINSOCK2_H_WITNESS
+
+/* Normal invocation.  */
+#elif !defined _GL_UNISTD_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_UNISTD_H@
+# @INCLUDE_NEXT@ @NEXT_UNISTD_H@
+#endif
+
+/* Get all possible declarations of gethostname().  */
+#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
+  && !defined _GL_INCLUDING_WINSOCK2_H
+# define _GL_INCLUDING_WINSOCK2_H
+# include <winsock2.h>
+# undef _GL_INCLUDING_WINSOCK2_H
+#endif
+
+#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
+#define _GL_UNISTD_H
+
+/* NetBSD 5.0 mis-defines NULL.  Also get size_t.  */
+#include <stddef.h>
+
+/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
+/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
+     || (@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK)) \
+    && ! defined __GLIBC__
+# include <stdio.h>
+#endif
+
+/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__
+# include <fcntl.h>
+#endif
+
+/* mingw fails to declare _exit in <unistd.h>.  */
+/* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
+/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* mingw declares getcwd in <io.h>, not in <unistd.h>.  */
+#if ((@GNULIB_GETCWD@ || defined GNULIB_POSIXCHECK) \
+     && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+# include <io.h>
+#endif
+
+#if (@GNULIB_WRITE@ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \
+     || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK)
+/* Get ssize_t.  */
+# include <sys/types.h>
+#endif
+
+/* Get getopt(), optarg, optind, opterr, optopt.
+   But avoid namespace pollution on glibc systems.  */
+#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT
+# include <getopt.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+#if @GNULIB_GETHOSTNAME@
+/* Get all possible declarations of gethostname().  */
+# if @UNISTD_H_HAVE_WINSOCK2_H@
+#  if !defined _GL_SYS_SOCKET_H
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef socket
+#    define socket              socket_used_without_including_sys_socket_h
+#    undef connect
+#    define connect             connect_used_without_including_sys_socket_h
+#    undef accept
+#    define accept              accept_used_without_including_sys_socket_h
+#    undef bind
+#    define bind                bind_used_without_including_sys_socket_h
+#    undef getpeername
+#    define getpeername         getpeername_used_without_including_sys_socket_h
+#    undef getsockname
+#    define getsockname         getsockname_used_without_including_sys_socket_h
+#    undef getsockopt
+#    define getsockopt          getsockopt_used_without_including_sys_socket_h
+#    undef listen
+#    define listen              listen_used_without_including_sys_socket_h
+#    undef recv
+#    define recv                recv_used_without_including_sys_socket_h
+#    undef send
+#    define send                send_used_without_including_sys_socket_h
+#    undef recvfrom
+#    define recvfrom            recvfrom_used_without_including_sys_socket_h
+#    undef sendto
+#    define sendto              sendto_used_without_including_sys_socket_h
+#    undef setsockopt
+#    define setsockopt          setsockopt_used_without_including_sys_socket_h
+#    undef shutdown
+#    define shutdown            shutdown_used_without_including_sys_socket_h
+#   else
+     _GL_WARN_ON_USE (socket,
+                      "socket() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (connect,
+                      "connect() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (accept,
+                      "accept() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (bind,
+                      "bind() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (getpeername,
+                      "getpeername() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (getsockname,
+                      "getsockname() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (getsockopt,
+                      "getsockopt() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (listen,
+                      "listen() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (recv,
+                      "recv() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (send,
+                      "send() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (recvfrom,
+                      "recvfrom() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (sendto,
+                      "sendto() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (setsockopt,
+                      "setsockopt() used without including <sys/socket.h>");
+     _GL_WARN_ON_USE (shutdown,
+                      "shutdown() used without including <sys/socket.h>");
+#   endif
+#  endif
+#  if !defined _GL_SYS_SELECT_H
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef select
+#    define select              select_used_without_including_sys_select_h
+#   else
+     _GL_WARN_ON_USE (select,
+                      "select() used without including <sys/select.h>");
+#   endif
+#  endif
+# endif
+#endif
+
+
+/* OS/2 EMX lacks these macros.  */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO 2
+#endif
+
+/* Ensure *_OK macros exist.  */
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+
+
+/* Declare overridden functions.  */
+
+
+#if defined GNULIB_POSIXCHECK
+/* The access() function is a security risk.  */
+_GL_WARN_ON_USE (access, "the access function is a security risk - "
+                 "use the gnulib module faccessat instead");
+#endif
+
+
+#if @GNULIB_CHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/chown.html>.  */
+# if @REPLACE_CHOWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef chown
+#   define chown rpl_chown
+#  endif
+_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid));
+# else
+#  if !@HAVE_CHOWN@
+_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)
+                              _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid));
+# endif
+_GL_CXXALIASWARN (chown);
+#elif defined GNULIB_POSIXCHECK
+# undef chown
+# if HAVE_RAW_DECL_CHOWN
+_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and "
+                 "doesn't treat a uid or gid of -1 on some systems - "
+                 "use gnulib module chown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CLOSE@
+# if @REPLACE_CLOSE@
+/* Automatically included by modules that need a replacement for close.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef close
+#   define close rpl_close
+#  endif
+_GL_FUNCDECL_RPL (close, int, (int fd));
+_GL_CXXALIAS_RPL (close, int, (int fd));
+# else
+_GL_CXXALIAS_SYS (close, int, (int fd));
+# endif
+_GL_CXXALIASWARN (close);
+#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+# undef close
+# define close close_used_without_requesting_gnulib_module_close
+#elif defined GNULIB_POSIXCHECK
+# undef close
+/* Assume close is always declared.  */
+_GL_WARN_ON_USE (close, "close does not portably work on sockets - "
+                 "use gnulib module close for portability");
+#endif
+
+
+#if @REPLACE_DUP@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  define dup rpl_dup
+# endif
+_GL_FUNCDECL_RPL (dup, int, (int oldfd));
+_GL_CXXALIAS_RPL (dup, int, (int oldfd));
+#else
+_GL_CXXALIAS_SYS (dup, int, (int oldfd));
+#endif
+_GL_CXXALIASWARN (dup);
+
+
+#if @GNULIB_DUP2@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
+   NEWFD = OLDFD, otherwise close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/dup2.html>.  */
+# if @REPLACE_DUP2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup2 rpl_dup2
+#  endif
+_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd));
+_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd));
+# else
+#  if !@HAVE_DUP2@
+_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd));
+#  endif
+_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd));
+# endif
+_GL_CXXALIASWARN (dup2);
+#elif defined GNULIB_POSIXCHECK
+# undef dup2
+# if HAVE_RAW_DECL_DUP2
+_GL_WARN_ON_USE (dup2, "dup2 is unportable - "
+                 "use gnulib module dup2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_DUP3@
+/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
+   specified flags.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Close NEWFD first if it is open.
+   Return newfd if successful, otherwise -1 and errno set.
+   See the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>.  */
+# if @HAVE_DUP3@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dup3 rpl_dup3
+#  endif
+_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags));
+# else
+_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags));
+_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags));
+# endif
+_GL_CXXALIASWARN (dup3);
+#elif defined GNULIB_POSIXCHECK
+# undef dup3
+# if HAVE_RAW_DECL_DUP3
+_GL_WARN_ON_USE (dup3, "dup3 is unportable - "
+                 "use gnulib module dup3 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ENVIRON@
+# if !@HAVE_DECL_ENVIRON@
+/* Set of environment variables and values.  An array of strings of the form
+   "VARIABLE=VALUE", terminated with a NULL.  */
+#  if defined __APPLE__ && defined __MACH__
+#   include <crt_externs.h>
+#   define environ (*_NSGetEnviron ())
+#  else
+#   ifdef __cplusplus
+extern "C" {
+#   endif
+extern char **environ;
+#   ifdef __cplusplus
+}
+#   endif
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if HAVE_RAW_DECL_ENVIRON
+static inline char ***
+rpl_environ (void)
+{
+  return &environ;
+}
+_GL_WARN_ON_USE (rpl_environ, "environ is unportable - "
+                 "use gnulib module environ for portability");
+#  undef environ
+#  define environ (*rpl_environ ())
+# endif
+#endif
+
+
+#if @GNULIB_EUIDACCESS@
+/* Like access(), except that it uses the effective user id and group id of
+   the current process.  */
+# if !@HAVE_EUIDACCESS@
+_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode));
+_GL_CXXALIASWARN (euidaccess);
+# if defined GNULIB_POSIXCHECK
+/* Like access(), this function is a security risk.  */
+_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - "
+                 "use the gnulib module faccessat instead");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef euidaccess
+# if HAVE_RAW_DECL_EUIDACCESS
+_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - "
+                 "use gnulib module euidaccess for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FACCESSAT@
+# if !@HAVE_FACCESSAT@
+_GL_FUNCDECL_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag)
+                  _GL_ARG_NONNULL ((2)));
+# endif
+_GL_CXXALIAS_SYS (faccessat, int,
+                  (int fd, char const *file, int mode, int flag));
+_GL_CXXALIASWARN (faccessat);
+#elif defined GNULIB_POSIXCHECK
+# undef faccessat
+# if HAVE_RAW_DECL_FACCESSAT
+_GL_WARN_ON_USE (faccessat, "faccessat is not portable - "
+                 "use gnulib module faccessat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHDIR@
+/* Change the process' current working directory to the directory on which
+   the given file descriptor is open.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/fchdir.html>.  */
+# if ! @HAVE_FCHDIR@
+_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/));
+
+/* Gnulib internal hooks needed to maintain the fchdir metadata.  */
+_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename)
+     _GL_ARG_NONNULL ((2));
+_GL_EXTERN_C void _gl_unregister_fd (int fd);
+_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd);
+_GL_EXTERN_C const char *_gl_directory_name (int fd);
+
+# endif
+_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/));
+_GL_CXXALIASWARN (fchdir);
+#elif defined GNULIB_POSIXCHECK
+# undef fchdir
+# if HAVE_RAW_DECL_FCHDIR
+_GL_WARN_ON_USE (fchdir, "fchdir is unportable - "
+                 "use gnulib module fchdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FCHOWNAT@
+# if @REPLACE_FCHOWNAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fchownat
+#   define fchownat rpl_fchownat
+#  endif
+_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# else
+#  if !@HAVE_FCHOWNAT@
+_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file,
+                                  uid_t owner, gid_t group, int flag));
+# endif
+_GL_CXXALIASWARN (fchownat);
+#elif defined GNULIB_POSIXCHECK
+# undef fchownat
+# if HAVE_RAW_DECL_FCHOWNAT
+_GL_WARN_ON_USE (fchownat, "fchownat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FSYNC@
+/* Synchronize changes to a file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/fsync.html>.  */
+# if !@HAVE_FSYNC@
+_GL_FUNCDECL_SYS (fsync, int, (int fd));
+# endif
+_GL_CXXALIAS_SYS (fsync, int, (int fd));
+_GL_CXXALIASWARN (fsync);
+#elif defined GNULIB_POSIXCHECK
+# undef fsync
+# if HAVE_RAW_DECL_FSYNC
+_GL_WARN_ON_USE (fsync, "fsync is unportable - "
+                 "use gnulib module fsync for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FTRUNCATE@
+/* Change the size of the file to which FD is opened to become equal to LENGTH.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/ftruncate.html>.  */
+# if !@HAVE_FTRUNCATE@
+_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length));
+# endif
+_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length));
+_GL_CXXALIASWARN (ftruncate);
+#elif defined GNULIB_POSIXCHECK
+# undef ftruncate
+# if HAVE_RAW_DECL_FTRUNCATE
+_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - "
+                 "use gnulib module ftruncate for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETCWD@
+/* Get the name of the current working directory, and put it in SIZE bytes
+   of BUF.
+   Return BUF if successful, or NULL if the directory couldn't be determined
+   or SIZE was too small.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/getcwd.html>.
+   Additionally, the gnulib module 'getcwd' guarantees the following GNU
+   extension: If BUF is NULL, an array is allocated with 'malloc'; the array
+   is SIZE bytes long, unless SIZE == 0, in which case it is as big as
+   necessary.  */
+# if @REPLACE_GETCWD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getcwd rpl_getcwd
+#  endif
+_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size));
+_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size));
+# else
+/* Need to cast, because on mingw, the second parameter is
+                                                   int size.  */
+_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size));
+# endif
+_GL_CXXALIASWARN (getcwd);
+#elif defined GNULIB_POSIXCHECK
+# undef getcwd
+# if HAVE_RAW_DECL_GETCWD
+_GL_WARN_ON_USE (getcwd, "getcwd is unportable - "
+                 "use gnulib module getcwd for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDOMAINNAME@
+/* Return the NIS domain name of the machine.
+   WARNING! The NIS domain name is unrelated to the fully qualified host name
+            of the machine.  It is also unrelated to email addresses.
+   WARNING! The NIS domain name is usually the empty string or "(none)" when
+            not using NIS.
+
+   Put up to LEN bytes of the NIS domain name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if !@HAVE_GETDOMAINNAME@
+_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len)
+                                      _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on MacOS X 10.5 systems, the second parameter is
+                                                        int len.  */
+_GL_CXXALIAS_SYS_CAST (getdomainname, int, (char *name, size_t len));
+_GL_CXXALIASWARN (getdomainname);
+#elif defined GNULIB_POSIXCHECK
+# undef getdomainname
+# if HAVE_RAW_DECL_GETDOMAINNAME
+_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - "
+                 "use gnulib module getdomainname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETDTABLESIZE@
+/* Return the maximum number of file descriptors in the current process.
+   In POSIX, this is same as sysconf (_SC_OPEN_MAX).  */
+# if !@HAVE_GETDTABLESIZE@
+_GL_FUNCDECL_SYS (getdtablesize, int, (void));
+# endif
+_GL_CXXALIAS_SYS (getdtablesize, int, (void));
+_GL_CXXALIASWARN (getdtablesize);
+#elif defined GNULIB_POSIXCHECK
+# undef getdtablesize
+# if HAVE_RAW_DECL_GETDTABLESIZE
+_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - "
+                 "use gnulib module getdtablesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETGROUPS@
+/* Return the supplemental groups that the current process belongs to.
+   It is unspecified whether the effective group id is in the list.
+   If N is 0, return the group count; otherwise, N describes how many
+   entries are available in GROUPS.  Return -1 and set errno if N is
+   not 0 and not large enough.  Fails with ENOSYS on some systems.  */
+# if @REPLACE_GETGROUPS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getgroups
+#   define getgroups rpl_getgroups
+#  endif
+_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups));
+_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups));
+# else
+#  if !@HAVE_GETGROUPS@
+_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups));
+#  endif
+_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups));
+# endif
+_GL_CXXALIASWARN (getgroups);
+#elif defined GNULIB_POSIXCHECK
+# undef getgroups
+# if HAVE_RAW_DECL_GETGROUPS
+_GL_WARN_ON_USE (getgroups, "getgroups is unportable - "
+                 "use gnulib module getgroups for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETHOSTNAME@
+/* Return the standard host name of the machine.
+   WARNING! The host name may or may not be fully qualified.
+
+   Put up to LEN bytes of the host name into NAME.
+   Null terminate it if the name is shorter than LEN.
+   If the host name is longer than LEN, set errno = EINVAL and return -1.
+   Return 0 if successful, otherwise set errno and return -1.  */
+# if @UNISTD_H_HAVE_WINSOCK2_H@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef gethostname
+#   define gethostname rpl_gethostname
+#  endif
+_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len));
+# else
+#  if !@HAVE_GETHOSTNAME@
+_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len)
+                                    _GL_ARG_NONNULL ((1)));
+#  endif
+/* Need to cast, because on Solaris 10 systems, the second parameter is
+                                                      int len.  */
+_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len));
+# endif
+_GL_CXXALIASWARN (gethostname);
+#elif @UNISTD_H_HAVE_WINSOCK2_H@
+# undef gethostname
+# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
+#elif defined GNULIB_POSIXCHECK
+# undef gethostname
+# if HAVE_RAW_DECL_GETHOSTNAME
+_GL_WARN_ON_USE (gethostname, "gethostname is unportable - "
+                 "use gnulib module gethostname for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN@
+/* Returns the user's login name, or NULL if it cannot be found.  Upon error,
+   returns NULL with errno set.
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !@HAVE_GETLOGIN@
+_GL_FUNCDECL_SYS (getlogin, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getlogin, char *, (void));
+_GL_CXXALIASWARN (getlogin);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin
+# if HAVE_RAW_DECL_GETLOGIN
+_GL_WARN_ON_USE (getlogin, "getlogin is unportable - "
+                 "use gnulib module getlogin for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETLOGIN_R@
+/* Copies the user's login name to NAME.
+   The array pointed to by NAME has room for SIZE bytes.
+
+   Returns 0 if successful.  Upon error, an error number is returned, or -1 in
+   the case that the login name cannot be found but no specific error is
+   provided (this case is hopefully rare but is left open by the POSIX spec).
+
+   See <http://www.opengroup.org/susv3xsh/getlogin.html>.
+
+   Most programs don't need to use this function, because the information is
+   available through environment variables:
+     ${LOGNAME-$USER}        on Unix platforms,
+     $USERNAME               on native Windows platforms.
+ */
+# if !@HAVE_DECL_GETLOGIN_R@
+_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size)
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+/* Need to cast, because on Solaris 10 systems, the second argument is
+                                                     int size.  */
+_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size));
+_GL_CXXALIASWARN (getlogin_r);
+#elif defined GNULIB_POSIXCHECK
+# undef getlogin_r
+# if HAVE_RAW_DECL_GETLOGIN_R
+_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - "
+                 "use gnulib module getlogin_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETPAGESIZE@
+# if @REPLACE_GETPAGESIZE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define getpagesize rpl_getpagesize
+#  endif
+_GL_FUNCDECL_RPL (getpagesize, int, (void));
+_GL_CXXALIAS_RPL (getpagesize, int, (void));
+# else
+#  if !@HAVE_GETPAGESIZE@
+#   if !defined getpagesize
+/* This is for POSIX systems.  */
+#    if !defined _gl_getpagesize && defined _SC_PAGESIZE
+#     if ! (defined __VMS && __VMS_VER < 70000000)
+#      define _gl_getpagesize() sysconf (_SC_PAGESIZE)
+#     endif
+#    endif
+/* This is for older VMS.  */
+#    if !defined _gl_getpagesize && defined __VMS
+#     ifdef __ALPHA
+#      define _gl_getpagesize() 8192
+#     else
+#      define _gl_getpagesize() 512
+#     endif
+#    endif
+/* This is for BeOS.  */
+#    if !defined _gl_getpagesize && @HAVE_OS_H@
+#     include <OS.h>
+#     if defined B_PAGE_SIZE
+#      define _gl_getpagesize() B_PAGE_SIZE
+#     endif
+#    endif
+/* This is for AmigaOS4.0.  */
+#    if !defined _gl_getpagesize && defined __amigaos4__
+#     define _gl_getpagesize() 2048
+#    endif
+/* This is for older Unix systems.  */
+#    if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@
+#     include <sys/param.h>
+#     ifdef EXEC_PAGESIZE
+#      define _gl_getpagesize() EXEC_PAGESIZE
+#     else
+#      ifdef NBPG
+#       ifndef CLSIZE
+#        define CLSIZE 1
+#       endif
+#       define _gl_getpagesize() (NBPG * CLSIZE)
+#      else
+#       ifdef NBPC
+#        define _gl_getpagesize() NBPC
+#       endif
+#      endif
+#     endif
+#    endif
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     define getpagesize() _gl_getpagesize ()
+#    else
+static inline int
+getpagesize ()
+{
+  return _gl_getpagesize ();
+}
+#    endif
+#   endif
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t.  */
+_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void));
+# endif
+# if @HAVE_DECL_GETPAGESIZE@
+_GL_CXXALIASWARN (getpagesize);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getpagesize
+# if HAVE_RAW_DECL_GETPAGESIZE
+_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - "
+                 "use gnulib module getpagesize for portability");
+# endif
+#endif
+
+
+#if @GNULIB_GETUSERSHELL@
+/* Return the next valid login shell on the system, or NULL when the end of
+   the list has been reached.  */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (getusershell, char *, (void));
+# endif
+_GL_CXXALIAS_SYS (getusershell, char *, (void));
+_GL_CXXALIASWARN (getusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef getusershell
+# if HAVE_RAW_DECL_GETUSERSHELL
+_GL_WARN_ON_USE (getusershell, "getusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Rewind to pointer that is advanced at each getusershell() call.  */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (setusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (setusershell, void, (void));
+_GL_CXXALIASWARN (setusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef setusershell
+# if HAVE_RAW_DECL_SETUSERSHELL
+_GL_WARN_ON_USE (setusershell, "setusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+#if @GNULIB_GETUSERSHELL@
+/* Free the pointer that is advanced at each getusershell() call and
+   associated resources.  */
+# if !@HAVE_DECL_GETUSERSHELL@
+_GL_FUNCDECL_SYS (endusershell, void, (void));
+# endif
+_GL_CXXALIAS_SYS (endusershell, void, (void));
+_GL_CXXALIASWARN (endusershell);
+#elif defined GNULIB_POSIXCHECK
+# undef endusershell
+# if HAVE_RAW_DECL_ENDUSERSHELL
+_GL_WARN_ON_USE (endusershell, "endusershell is unportable - "
+                 "use gnulib module getusershell for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LCHOWN@
+/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
+   to GID (if GID is not -1).  Do not follow symbolic links.
+   Return 0 if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/lchown.html>.  */
+# if @REPLACE_LCHOWN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef lchown
+#   define lchown rpl_lchown
+#  endif
+_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group));
+# else
+#  if !@HAVE_LCHOWN@
+_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group));
+# endif
+_GL_CXXALIASWARN (lchown);
+#elif defined GNULIB_POSIXCHECK
+# undef lchown
+# if HAVE_RAW_DECL_LCHOWN
+_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - "
+                 "use gnulib module lchown for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINK@
+/* Create a new hard link for an existing file.
+   Return 0 if successful, otherwise -1 and errno set.
+   See POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/link.html>.  */
+# if @REPLACE_LINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define link rpl_link
+#  endif
+_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2));
+# else
+#  if !@HAVE_LINK@
+_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2)
+                             _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2));
+# endif
+_GL_CXXALIASWARN (link);
+#elif defined GNULIB_POSIXCHECK
+# undef link
+# if HAVE_RAW_DECL_LINK
+_GL_WARN_ON_USE (link, "link is unportable - "
+                 "use gnulib module link for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LINKAT@
+/* Create a new hard link for an existing file, relative to two
+   directories.  FLAG controls whether symlinks are followed.
+   Return 0 if successful, otherwise -1 and errno set.  */
+# if @REPLACE_LINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef linkat
+#   define linkat rpl_linkat
+#  endif
+_GL_FUNCDECL_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# else
+#  if !@HAVE_LINKAT@
+_GL_FUNCDECL_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (linkat, int,
+                  (int fd1, const char *path1, int fd2, const char *path2,
+                   int flag));
+# endif
+_GL_CXXALIASWARN (linkat);
+#elif defined GNULIB_POSIXCHECK
+# undef linkat
+# if HAVE_RAW_DECL_LINKAT
+_GL_WARN_ON_USE (linkat, "linkat is unportable - "
+                 "use gnulib module linkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LSEEK@
+/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
+   Return the new offset if successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/lseek.html>.  */
+# if @REPLACE_LSEEK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define lseek rpl_lseek
+#  endif
+_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence));
+# else
+_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (lseek);
+#elif defined GNULIB_POSIXCHECK
+# undef lseek
+# if HAVE_RAW_DECL_LSEEK
+_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some "
+                 "systems - use gnulib module lseek for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PIPE2@
+/* Create a pipe, applying the given flags when opening the read-end of the
+   pipe and the write-end of the pipe.
+   The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
+   and O_TEXT, O_BINARY (defined in "binary-io.h").
+   Store the read-end as fd[0] and the write-end as fd[1].
+   Return 0 upon success, or -1 with errno set upon failure.
+   See also the Linux man page at
+   <http://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>.  */
+# if @HAVE_PIPE2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pipe2 rpl_pipe2
+#  endif
+_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags));
+# else
+_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags));
+# endif
+_GL_CXXALIASWARN (pipe2);
+#elif defined GNULIB_POSIXCHECK
+# undef pipe2
+# if HAVE_RAW_DECL_PIPE2
+_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - "
+                 "use gnulib module pipe2 for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PREAD@
+/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
+   Return the number of bytes placed into BUF if successful, otherwise
+   set errno and return -1.  0 indicates EOF.  See the POSIX:2001
+   specification <http://www.opengroup.org/susv3xsh/pread.html>.  */
+# if @REPLACE_PREAD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pread rpl_pread
+#  endif
+_GL_FUNCDECL_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# else
+#  if !@HAVE_PREAD@
+_GL_FUNCDECL_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pread, ssize_t,
+                  (int fd, void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pread);
+#elif defined GNULIB_POSIXCHECK
+# undef pread
+# if HAVE_RAW_DECL_PREAD
+_GL_WARN_ON_USE (pread, "pread is unportable - "
+                 "use gnulib module pread for portability");
+# endif
+#endif
+
+
+#if @GNULIB_PWRITE@
+/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
+   Return the number of bytes written if successful, otherwise
+   set errno and return -1.  0 indicates nothing written.  See the
+   POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/pwrite.html>.  */
+# if @REPLACE_PWRITE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define pwrite rpl_pwrite
+#  endif
+_GL_FUNCDECL_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# else
+#  if !@HAVE_PWRITE@
+_GL_FUNCDECL_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (pwrite, ssize_t,
+                  (int fd, const void *buf, size_t bufsize, off_t offset));
+# endif
+_GL_CXXALIASWARN (pwrite);
+#elif defined GNULIB_POSIXCHECK
+# undef pwrite
+# if HAVE_RAW_DECL_PWRITE
+_GL_WARN_ON_USE (pwrite, "pwrite is unportable - "
+                 "use gnulib module pwrite for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READLINK@
+/* Read the contents of the symbolic link FILE and place the first BUFSIZE
+   bytes of it into BUF.  Return the number of bytes placed into BUF if
+   successful, otherwise -1 and errno set.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/readlink.html>.  */
+# if @REPLACE_READLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define readlink rpl_readlink
+#  endif
+_GL_FUNCDECL_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# else
+#  if !@HAVE_READLINK@
+_GL_FUNCDECL_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (readlink, ssize_t,
+                  (const char *file, char *buf, size_t bufsize));
+# endif
+_GL_CXXALIASWARN (readlink);
+#elif defined GNULIB_POSIXCHECK
+# undef readlink
+# if HAVE_RAW_DECL_READLINK
+_GL_WARN_ON_USE (readlink, "readlink is unportable - "
+                 "use gnulib module readlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_READLINKAT@
+# if !@HAVE_READLINKAT@
+_GL_FUNCDECL_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len)
+                  _GL_ARG_NONNULL ((2, 3)));
+# endif
+_GL_CXXALIAS_SYS (readlinkat, ssize_t,
+                  (int fd, char const *file, char *buf, size_t len));
+_GL_CXXALIASWARN (readlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef readlinkat
+# if HAVE_RAW_DECL_READLINKAT
+_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RMDIR@
+/* Remove the directory DIR.  */
+# if @REPLACE_RMDIR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define rmdir rpl_rmdir
+#  endif
+_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (rmdir, int, (char const *name));
+# else
+_GL_CXXALIAS_SYS (rmdir, int, (char const *name));
+# endif
+_GL_CXXALIASWARN (rmdir);
+#elif defined GNULIB_POSIXCHECK
+# undef rmdir
+# if HAVE_RAW_DECL_RMDIR
+_GL_WARN_ON_USE (rmdir, "rmdir is unportable - "
+                 "use gnulib module rmdir for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SLEEP@
+/* Pause the execution of the current thread for N seconds.
+   Returns the number of seconds left to sleep.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/sleep.html>.  */
+# if @REPLACE_SLEEP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sleep
+#   define sleep rpl_sleep
+#  endif
+_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n));
+_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n));
+# else
+#  if !@HAVE_SLEEP@
+_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n));
+#  endif
+_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n));
+# endif
+_GL_CXXALIASWARN (sleep);
+#elif defined GNULIB_POSIXCHECK
+# undef sleep
+# if HAVE_RAW_DECL_SLEEP
+_GL_WARN_ON_USE (sleep, "sleep is unportable - "
+                 "use gnulib module sleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINK@
+# if @REPLACE_SYMLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef symlink
+#   define symlink rpl_symlink
+#  endif
+_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file));
+# else
+#  if !@HAVE_SYMLINK@
+_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file));
+# endif
+_GL_CXXALIASWARN (symlink);
+#elif defined GNULIB_POSIXCHECK
+# undef symlink
+# if HAVE_RAW_DECL_SYMLINK
+_GL_WARN_ON_USE (symlink, "symlink is not portable - "
+                 "use gnulib module symlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SYMLINKAT@
+# if !@HAVE_SYMLINKAT@
+_GL_FUNCDECL_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file)
+                  _GL_ARG_NONNULL ((1, 3)));
+# endif
+_GL_CXXALIAS_SYS (symlinkat, int,
+                  (char const *contents, int fd, char const *file));
+_GL_CXXALIASWARN (symlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef symlinkat
+# if HAVE_RAW_DECL_SYMLINKAT
+_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - "
+                 "use gnulib module symlinkat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TTYNAME_R@
+/* Store at most BUFLEN characters of the pathname of the terminal FD is
+   open on in BUF.  Return 0 on success, otherwise an error number.  */
+# if @REPLACE_TTYNAME_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ttyname_r
+#   define ttyname_r rpl_ttyname_r
+#  endif
+_GL_FUNCDECL_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# else
+#  if !@HAVE_TTYNAME_R@
+_GL_FUNCDECL_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (ttyname_r, int,
+                  (int fd, char *buf, size_t buflen));
+# endif
+_GL_CXXALIASWARN (ttyname_r);
+#elif defined GNULIB_POSIXCHECK
+# undef ttyname_r
+# if HAVE_RAW_DECL_TTYNAME_R
+_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - "
+                 "use gnulib module ttyname_r for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINK@
+# if @REPLACE_UNLINK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlink
+#   define unlink rpl_unlink
+#  endif
+_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (unlink, int, (char const *file));
+# else
+_GL_CXXALIAS_SYS (unlink, int, (char const *file));
+# endif
+_GL_CXXALIASWARN (unlink);
+#elif defined GNULIB_POSIXCHECK
+# undef unlink
+# if HAVE_RAW_DECL_UNLINK
+_GL_WARN_ON_USE (unlink, "unlink is not portable - "
+                 "use gnulib module unlink for portability");
+# endif
+#endif
+
+
+#if @GNULIB_UNLINKAT@
+# if @REPLACE_UNLINKAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef unlinkat
+#   define unlinkat rpl_unlinkat
+#  endif
+_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag));
+# else
+#  if !@HAVE_UNLINKAT@
+_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag));
+# endif
+_GL_CXXALIASWARN (unlinkat);
+#elif defined GNULIB_POSIXCHECK
+# undef unlinkat
+# if HAVE_RAW_DECL_UNLINKAT
+_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - "
+                 "use gnulib module openat for portability");
+# endif
+#endif
+
+
+#if @GNULIB_USLEEP@
+/* Pause the execution of the current thread for N microseconds.
+   Returns 0 on completion, or -1 on range error.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/sleep.html>.  */
+# if @REPLACE_USLEEP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef usleep
+#   define usleep rpl_usleep
+#  endif
+_GL_FUNCDECL_RPL (usleep, int, (useconds_t n));
+_GL_CXXALIAS_RPL (usleep, int, (useconds_t n));
+# else
+#  if !@HAVE_USLEEP@
+_GL_FUNCDECL_SYS (usleep, int, (useconds_t n));
+#  endif
+_GL_CXXALIAS_SYS (usleep, int, (useconds_t n));
+# endif
+_GL_CXXALIASWARN (usleep);
+#elif defined GNULIB_POSIXCHECK
+# undef usleep
+# if HAVE_RAW_DECL_USLEEP
+_GL_WARN_ON_USE (usleep, "usleep is unportable - "
+                 "use gnulib module usleep for portability");
+# endif
+#endif
+
+
+#if @GNULIB_WRITE@
+/* Write up to COUNT bytes starting at BUF to file descriptor FD.
+   See the POSIX:2001 specification
+   <http://www.opengroup.org/susv3xsh/write.html>.  */
+# if @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef write
+#   define write rpl_write
+#  endif
+_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count));
+# else
+/* Need to cast, because on mingw, the third parameter is
+                                                             unsigned int count
+   and the return type is 'int'.  */
+_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count));
+# endif
+_GL_CXXALIASWARN (write);
+#endif
+
+
+#endif /* _GL_UNISTD_H */
+#endif /* _GL_UNISTD_H */
diff --git a/gl/version-etc-fsf.c b/gl/version-etc-fsf.c
new file mode 100644 (file)
index 0000000..fc837a8
--- /dev/null
@@ -0,0 +1,30 @@
+/* Variable with FSF copyright information, for version-etc.
+   Copyright (C) 1999-2006, 2009-2010 Free Software Foundation, Inc.
+
+   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/>.  */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification.  */
+#include "version-etc.h"
+
+/* Default copyright goes to the FSF. */
+
+const char version_etc_copyright[] =
+  /* Do *not* mark this string for translation.  %s is a copyright
+     symbol suitable for this locale, and %d is the copyright
+     year.  */
+  "Copyright %s %d Free Software Foundation, Inc.";
diff --git a/gl/version-etc.c b/gl/version-etc.c
new file mode 100644 (file)
index 0000000..19c873d
--- /dev/null
@@ -0,0 +1,258 @@
+/* Print --version and bug-reporting information in a consistent format.
+   Copyright (C) 1999-2010 Free Software Foundation, Inc.
+
+   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/>.  */
+
+/* Written by Jim Meyering. */
+
+#include <config.h>
+
+/* Specification.  */
+#include "version-etc.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#if USE_UNLOCKED_IO
+# include "unlocked-io.h"
+#endif
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+/* If you use AM_INIT_AUTOMAKE's no-define option,
+   PACKAGE is not defined.  Use PACKAGE_TARNAME instead.  */
+#if ! defined PACKAGE && defined PACKAGE_TARNAME
+# define PACKAGE PACKAGE_TARNAME
+#endif
+
+enum { COPYRIGHT_YEAR = 2010 };
+
+/* The three functions below display the --version information the
+   standard way.
+
+   If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The functions differ in the way they are passed author names. */
+
+/* Display the --version information the standard way.
+
+   Author names are given in the array AUTHORS. N_AUTHORS is the
+   number of elements in the array. */
+void
+version_etc_arn (FILE *stream,
+                 const char *command_name, const char *package,
+                 const char *version,
+                 const char * const * authors, size_t n_authors)
+{
+  if (command_name)
+    fprintf (stream, "%s (%s) %s\n", command_name, package, version);
+  else
+    fprintf (stream, "%s %s\n", package, version);
+
+#ifdef PACKAGE_PACKAGER
+# ifdef PACKAGE_PACKAGER_VERSION
+  fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER,
+           PACKAGE_PACKAGER_VERSION);
+# else
+  fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER);
+# endif
+#endif
+
+  /* TRANSLATORS: Translate "(C)" to the copyright symbol
+     (C-in-a-circle), if this symbol is available in the user's
+     locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
+  fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR);
+
+  fputs (_("\
+\n\
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n\
+\n\
+"),
+         stream);
+
+  switch (n_authors)
+    {
+    case 0:
+      /* The caller must provide at least one author name.  */
+      abort ();
+    case 1:
+      /* TRANSLATORS: %s denotes an author name.  */
+      fprintf (stream, _("Written by %s.\n"), authors[0]);
+      break;
+    case 2:
+      /* TRANSLATORS: Each %s denotes an author name.  */
+      fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]);
+      break;
+    case 3:
+      /* TRANSLATORS: Each %s denotes an author name.  */
+      fprintf (stream, _("Written by %s, %s, and %s.\n"),
+               authors[0], authors[1], authors[2]);
+      break;
+    case 4:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"),
+               authors[0], authors[1], authors[2], authors[3]);
+      break;
+    case 5:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4]);
+      break;
+    case 6:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5]);
+      break;
+    case 7:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5], authors[6]);
+      break;
+    case 8:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"),
+                authors[0], authors[1], authors[2], authors[3], authors[4],
+                authors[5], authors[6], authors[7]);
+      break;
+    case 9:
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"),
+               authors[0], authors[1], authors[2], authors[3], authors[4],
+               authors[5], authors[6], authors[7], authors[8]);
+      break;
+    default:
+      /* 10 or more authors.  Use an abbreviation, since the human reader
+         will probably not want to read the entire list anyway.  */
+      /* TRANSLATORS: Each %s denotes an author name.
+         You can use line breaks, estimating that each author name occupies
+         ca. 16 screen columns and that a screen line has ca. 80 columns.  */
+      fprintf (stream, _("\
+Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"),
+                authors[0], authors[1], authors[2], authors[3], authors[4],
+                authors[5], authors[6], authors[7], authors[8]);
+      break;
+    }
+}
+
+/* Display the --version information the standard way.  See the initial
+   comment to this module, for more information.
+
+   Author names are given in the NULL-terminated array AUTHORS. */
+void
+version_etc_ar (FILE *stream,
+                const char *command_name, const char *package,
+                const char *version, const char * const * authors)
+{
+  size_t n_authors;
+
+  for (n_authors = 0; authors[n_authors]; n_authors++)
+    ;
+  version_etc_arn (stream, command_name, package, version, authors, n_authors);
+}
+
+/* Display the --version information the standard way.  See the initial
+   comment to this module, for more information.
+
+   Author names are given in the NULL-terminated va_list AUTHORS. */
+void
+version_etc_va (FILE *stream,
+                const char *command_name, const char *package,
+                const char *version, va_list authors)
+{
+  size_t n_authors;
+  const char *authtab[10];
+
+  for (n_authors = 0;
+       n_authors < 10
+         && (authtab[n_authors] = va_arg (authors, const char *)) != NULL;
+       n_authors++)
+    ;
+  version_etc_arn (stream, command_name, package, version,
+                   authtab, n_authors);
+}
+
+
+/* Display the --version information the standard way.
+
+   If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The authors names are passed as separate arguments, with an additional
+   NULL argument at the end.  */
+void
+version_etc (FILE *stream,
+             const char *command_name, const char *package,
+             const char *version, /* const char *author1, ...*/ ...)
+{
+  va_list authors;
+
+  va_start (authors, version);
+  version_etc_va (stream, command_name, package, version, authors);
+  va_end (authors);
+}
+
+void
+emit_bug_reporting_address (void)
+{
+  /* TRANSLATORS: The placeholder indicates the bug-reporting address
+     for this package.  Please add _another line_ saying
+     "Report translation bugs to <...>\n" with the address for translation
+     bugs (typically your translation team's web or email address).  */
+  printf (_("\nReport bugs to: %s\n"), PACKAGE_BUGREPORT);
+#ifdef PACKAGE_PACKAGER_BUG_REPORTS
+  printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER,
+          PACKAGE_PACKAGER_BUG_REPORTS);
+#endif
+#ifdef PACKAGE_URL
+  printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL);
+#else
+  printf (_("%s home page: <http://www.gnu.org/software/%s/>\n"),
+          PACKAGE_NAME, PACKAGE);
+#endif
+  fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"),
+         stdout);
+}
diff --git a/gl/version-etc.h b/gl/version-etc.h
new file mode 100644 (file)
index 0000000..629fe83
--- /dev/null
@@ -0,0 +1,78 @@
+/* Print --version and bug-reporting information in a consistent format.
+   Copyright (C) 1999, 2003, 2005, 2009-2010 Free Software Foundation, Inc.
+
+   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/>.  */
+
+/* Written by Jim Meyering. */
+
+#ifndef VERSION_ETC_H
+# define VERSION_ETC_H 1
+
+# include <stdarg.h>
+# include <stdio.h>
+
+/* The `sentinel' attribute was added in gcc 4.0.  */
+#ifndef ATTRIBUTE_SENTINEL
+# if 4 <= __GNUC__
+#  define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
+# else
+#  define ATTRIBUTE_SENTINEL /* empty */
+# endif
+#endif
+
+extern const char version_etc_copyright[];
+
+/* The three functions below display the --version information in the
+   standard way: command and package names, package version, followed
+   by a short GPLv3+ notice and a list of up to 10 author names.
+
+   If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of
+   the program.  The formats are therefore:
+
+   PACKAGE VERSION
+
+   or
+
+   COMMAND_NAME (PACKAGE) VERSION.
+
+   The functions differ in the way they are passed author names: */
+
+/* N_AUTHORS names are supplied in array AUTHORS.  */
+extern void version_etc_arn (FILE *stream,
+                             const char *command_name, const char *package,
+                             const char *version,
+                             const char * const * authors, size_t n_authors);
+
+/* Names are passed in the NULL-terminated array AUTHORS.  */
+extern void version_etc_ar (FILE *stream,
+                            const char *command_name, const char *package,
+                            const char *version, const char * const * authors);
+
+/* Names are passed in the NULL-terminated va_list.  */
+extern void version_etc_va (FILE *stream,
+                            const char *command_name, const char *package,
+                            const char *version, va_list authors);
+
+/* Names are passed as separate arguments, with an additional
+   NULL argument at the end.  */
+extern void version_etc (FILE *stream,
+                         const char *command_name, const char *package,
+                         const char *version,
+                         /* const char *author1, ..., NULL */ ...)
+  ATTRIBUTE_SENTINEL;
+
+/* Display the usual `Report bugs to' stanza */
+extern void emit_bug_reporting_address (void);
+
+#endif /* VERSION_ETC_H */
diff --git a/gl/wchar.in.h b/gl/wchar.in.h
new file mode 100644 (file)
index 0000000..88d47db
--- /dev/null
@@ -0,0 +1,428 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2010 Free Software Foundation, Inc.
+
+   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, 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, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+typedef int rpl_mbstate_t;
+# undef mbstate_t
+# define mbstate_t rpl_mbstate_t
+# define GNULIB_defined_mbstate_t 1
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c));
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c));
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc));
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc));
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSNRTOMBS@
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t));
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t));
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+#endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
+#endif
diff --git a/gtk-doc.make b/gtk-doc.make
new file mode 100644 (file)
index 0000000..57fab98
--- /dev/null
@@ -0,0 +1,230 @@
+# -*- mode: makefile -*-
+
+####################################
+# Everything below here is generic #
+####################################
+
+if GTK_DOC_USE_LIBTOOL
+GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN = $(LIBTOOL) --mode=execute
+else
+GTKDOC_CC = $(CC) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+GTKDOC_LD = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
+GTKDOC_RUN =
+endif
+
+# 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)
+
+EXTRA_DIST =                           \
+       $(content_files)                \
+       $(HTML_IMAGES)                  \
+       $(DOC_MAIN_SGML_FILE)           \
+       $(DOC_MODULE)-sections.txt      \
+       $(DOC_MODULE)-overrides.txt
+
+DOC_STAMPS=scan-build.stamp tmpl-build.stamp sgml-build.stamp html-build.stamp \
+       pdf-build.stamp \
+       $(srcdir)/tmpl.stamp $(srcdir)/sgml.stamp $(srcdir)/html.stamp \
+       $(srcdir)/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)
+
+if ENABLE_GTK_DOC
+if GTK_DOC_BUILD_HTML
+HTML_BUILD_STAMP=html-build.stamp
+else
+HTML_BUILD_STAMP=
+endif
+if GTK_DOC_BUILD_PDF
+PDF_BUILD_STAMP=pdf-build.stamp
+else
+PDF_BUILD_STAMP=
+endif
+
+all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+else
+all-local:
+endif
+
+docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
+
+$(REPORT_FILES): sgml-build.stamp
+
+#### scan ####
+
+scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
+       @echo 'gtk-doc: Scanning header files'
+       @-chmod -R u+w $(srcdir)
+       @_source_dir='' ; for i in $(DOC_SOURCE_DIR) ; do \
+           _source_dir="$${_source_dir} --source-dir=$$i" ; \
+         done ; \
+         cd $(srcdir) && \
+         gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
+       @if grep -l '^..*$$' $(srcdir)/$(DOC_MODULE).types > /dev/null 2>&1 ; then \
+           CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" gtkdoc-scangobj $(SCANGOBJ_OPTIONS) --module=$(DOC_MODULE) --output-dir=$(srcdir) ; \
+       else \
+           cd $(srcdir) ; \
+           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: $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt
+       @echo 'gtk-doc: Rebuilding template files'
+       @-chmod -R u+w $(srcdir)
+       @cd $(srcdir) && gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS)
+       @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 'gtk-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 ; \
+         cd $(srcdir) && \
+         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 'gtk-doc: Building HTML'
+       @-chmod -R u+w $(srcdir)
+       @rm -rf $(srcdir)/html
+       @mkdir $(srcdir)/html
+       @mkhtml_options=""; \
+       gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
+       if test "$(?)" = "0"; then \
+         mkhtml_options=--path="$(srcdir)"; \
+       fi; \
+       cd $(srcdir)/html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
+       @test "x$(HTML_IMAGES)" = "x" || ( cd $(srcdir) && cp $(HTML_IMAGES) html )
+       @echo 'gtk-doc: Fixing cross-references'
+       @cd $(srcdir) && 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 'gtk-doc: Building PDF'
+       @-chmod -R u+w $(srcdir)
+       @rm -rf $(srcdir)/$(DOC_MODULE).pdf
+       @mkpdf_imgdirs=""; \
+       if test "x$(HTML_IMAGES)" != "x"; then \
+         for img in $(HTML_IMAGES); do \
+           part=`dirname $$img`; \
+           echo $$mkpdf_imgdirs | grep >/dev/null "\-\-imgdir=$$part "; \
+           if test $$? != 0; then \
+             mkpdf_imgdirs="$$mkpdf_imgdirs --imgdir=$$part"; \
+           fi; \
+         done; \
+       fi; \
+       cd $(srcdir) && gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_imgdirs $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
+       @touch pdf-build.stamp
+
+##############
+
+clean-local:
+       rm -f *~ *.bak
+       rm -rf .libs
+
+distclean-local:
+       cd $(srcdir) && \
+         rm -rf xml $(REPORT_FILES) $(DOC_MODULE).pdf \
+                $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
+
+maintainer-clean-local: clean
+       cd $(srcdir) && rm -rf xml html
+
+install-data-local:
+       @installfiles=`echo $(srcdir)/html/*`; \
+       if test "$$installfiles" = '$(srcdir)/html/*'; \
+       then echo '-- 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 '-- Installing '$$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; \
+           mv -f $${installdir}/$(DOC_MODULE).devhelp \
+             $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp; \
+         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
+#
+if ENABLE_GTK_DOC
+dist-check-gtkdoc:
+else
+dist-check-gtkdoc:
+       @echo "*** gtk-doc must be installed and enabled in order to make dist"
+       @false
+endif
+
+dist-hook: dist-check-gtkdoc dist-hook-local
+       mkdir $(distdir)/tmpl
+       mkdir $(distdir)/html
+       -cp $(srcdir)/tmpl/*.sgml $(distdir)/tmpl
+       cp $(srcdir)/html/* $(distdir)/html
+       -cp $(srcdir)/$(DOC_MODULE).pdf $(distdir)/
+       -cp $(srcdir)/$(DOC_MODULE).types $(distdir)/
+       -cp $(srcdir)/$(DOC_MODULE)-sections.txt $(distdir)/
+       cd $(distdir) && rm -f $(DISTCLEANFILES)
+       $(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
+
+.PHONY : dist-hook-local docs
diff --git a/lib/ASN1.c b/lib/ASN1.c
new file mode 100644 (file)
index 0000000..01e84b5
--- /dev/null
@@ -0,0 +1,2981 @@
+
+/* A Bison parser, made by GNU Bison 2.4.1.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+   
+      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+   
+   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/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+   
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.4.1"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 0
+
+/* Push parsers.  */
+#define YYPUSH 0
+
+/* Pull parsers.  */
+#define YYPULL 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse         _asn1_yyparse
+#define yylex           _asn1_yylex
+#define yyerror         _asn1_yyerror
+#define yylval          _asn1_yylval
+#define yychar          _asn1_yychar
+#define yydebug         _asn1_yydebug
+#define yynerrs         _asn1_yynerrs
+
+
+/* Copy the first part of user declarations.  */
+
+/* Line 189 of yacc.c  */
+#line 1 "ASN1.y"
+
+/*
+ * Copyright (C) 2001, 2002, 2004, 2005, 2006, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+/*****************************************************/
+/* File: x509_ASN.y                                  */
+/* Description: input file for 'bison' program.      */
+/*   The output file is a parser (in C language) for */
+/*   ASN.1 syntax                                    */
+/*****************************************************/
+
+#include <int.h>
+#include <parser_aux.h>
+#include <structure.h>
+
+static FILE *file_asn1;                        /* Pointer to file to parse */
+static asn1_retCode result_parse;      /* result of the parser
+                                          algorithm */
+static ASN1_TYPE p_tree;               /* pointer to the root of the
+                                          structure created by the
+                                          parser*/
+static unsigned long lineNumber;       /* line number describing the
+                                          parser position inside the
+                                          file */
+static char lastToken[ASN1_MAX_NAME_SIZE+1];   /* last token find in the file
+                                          to parse before the 'parse
+                                          error' */
+extern char _asn1_identifierMissing[];
+static const char *fileName;           /* file to parse */
+
+static int _asn1_yyerror (const char *);
+static int _asn1_yylex(void);
+
+
+
+/* Line 189 of yacc.c  */
+#line 136 "ASN1.c"
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     ASSIG = 258,
+     NUM = 259,
+     IDENTIFIER = 260,
+     OPTIONAL = 261,
+     INTEGER = 262,
+     SIZE = 263,
+     OCTET = 264,
+     STRING = 265,
+     SEQUENCE = 266,
+     BIT = 267,
+     UNIVERSAL = 268,
+     PRIVATE = 269,
+     APPLICATION = 270,
+     DEFAULT = 271,
+     CHOICE = 272,
+     OF = 273,
+     OBJECT = 274,
+     STR_IDENTIFIER = 275,
+     BOOLEAN = 276,
+     ASN1_TRUE = 277,
+     ASN1_FALSE = 278,
+     TOKEN_NULL = 279,
+     ANY = 280,
+     DEFINED = 281,
+     BY = 282,
+     SET = 283,
+     EXPLICIT = 284,
+     IMPLICIT = 285,
+     DEFINITIONS = 286,
+     TAGS = 287,
+     BEGIN = 288,
+     END = 289,
+     UTCTime = 290,
+     GeneralizedTime = 291,
+     GeneralString = 292,
+     FROM = 293,
+     IMPORTS = 294,
+     ENUMERATED = 295
+   };
+#endif
+/* Tokens.  */
+#define ASSIG 258
+#define NUM 259
+#define IDENTIFIER 260
+#define OPTIONAL 261
+#define INTEGER 262
+#define SIZE 263
+#define OCTET 264
+#define STRING 265
+#define SEQUENCE 266
+#define BIT 267
+#define UNIVERSAL 268
+#define PRIVATE 269
+#define APPLICATION 270
+#define DEFAULT 271
+#define CHOICE 272
+#define OF 273
+#define OBJECT 274
+#define STR_IDENTIFIER 275
+#define BOOLEAN 276
+#define ASN1_TRUE 277
+#define ASN1_FALSE 278
+#define TOKEN_NULL 279
+#define ANY 280
+#define DEFINED 281
+#define BY 282
+#define SET 283
+#define EXPLICIT 284
+#define IMPLICIT 285
+#define DEFINITIONS 286
+#define TAGS 287
+#define BEGIN 288
+#define END 289
+#define UTCTime 290
+#define GeneralizedTime 291
+#define GeneralString 292
+#define FROM 293
+#define IMPORTS 294
+#define ENUMERATED 295
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+
+/* Line 214 of yacc.c  */
+#line 58 "ASN1.y"
+
+  unsigned int constant;
+  char str[ASN1_MAX_NAME_SIZE+1];
+  ASN1_TYPE node;
+
+
+
+/* Line 214 of yacc.c  */
+#line 260 "ASN1.c"
+} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+/* Copy the second part of user declarations.  */
+
+
+/* Line 264 of yacc.c  */
+#line 272 "ASN1.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+            && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+        || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss_alloc;
+  YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)             \
+      do                                       \
+       {                                       \
+         YYSIZE_T yyi;                         \
+         for (yyi = 0; yyi < (Count); yyi++)   \
+           (To)[yyi] = (From)[yyi];            \
+       }                                       \
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
+    do                                                                 \
+      {                                                                        \
+       YYSIZE_T yynewbytes;                                            \
+       YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
+       Stack = &yyptr->Stack_alloc;                                    \
+       yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+       yyptr += yynewbytes / sizeof (*yyptr);                          \
+      }                                                                        \
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  5
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   192
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  52
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  43
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  99
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  190
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   295
+
+#define YYTRANSLATE(YYX)                                               \
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      43,    44,     2,    41,    45,    42,    51,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    46,     2,    47,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    49,    48,    50,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,    12,    14,    17,    20,    22,    24,    26,
+      28,    30,    32,    36,    41,    43,    47,    49,    54,    56,
+      59,    61,    63,    65,    69,    74,    76,    79,    82,    85,
+      88,    91,    93,    97,    99,   104,   109,   117,   119,   121,
+     123,   128,   136,   138,   142,   144,   147,   150,   154,   159,
+     161,   165,   168,   172,   178,   183,   186,   188,   191,   193,
+     195,   197,   199,   201,   203,   205,   207,   209,   211,   213,
+     215,   217,   219,   222,   224,   227,   230,   233,   235,   239,
+     244,   248,   253,   258,   262,   267,   272,   274,   279,   283,
+     291,   298,   303,   305,   307,   309,   312,   317,   321,   323
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      53,     0,    -1,    93,    31,    94,    32,     3,    33,    92,
+      34,    -1,     4,    -1,    41,     4,    -1,    42,     4,    -1,
+      54,    -1,    55,    -1,     4,    -1,     5,    -1,    56,    -1,
+       5,    -1,    43,    56,    44,    -1,     5,    43,    56,    44,
+      -1,    59,    -1,    60,    45,    59,    -1,    57,    -1,     5,
+      43,     4,    44,    -1,    61,    -1,    62,    61,    -1,    13,
+      -1,    14,    -1,    15,    -1,    46,     4,    47,    -1,    46,
+      63,     4,    47,    -1,    64,    -1,    64,    29,    -1,    64,
+      30,    -1,    16,    58,    -1,    16,    22,    -1,    16,    23,
+      -1,    56,    -1,    67,    48,    56,    -1,     7,    -1,     7,
+      49,    60,    50,    -1,    68,    43,    67,    44,    -1,    68,
+      43,    57,    51,    51,    57,    44,    -1,    21,    -1,    35,
+      -1,    36,    -1,     8,    43,    57,    44,    -1,     8,    43,
+      57,    51,    51,    57,    44,    -1,    71,    -1,    43,    71,
+      44,    -1,    37,    -1,    37,    72,    -1,     9,    10,    -1,
+       9,    10,    72,    -1,     5,    43,     4,    44,    -1,    75,
+      -1,    76,    45,    75,    -1,    12,    10,    -1,    12,    10,
+      72,    -1,    12,    10,    49,    76,    50,    -1,    40,    49,
+      76,    50,    -1,    19,    20,    -1,     5,    -1,     5,    72,
+      -1,    68,    -1,    78,    -1,    69,    -1,    70,    -1,    74,
+      -1,    77,    -1,    73,    -1,    85,    -1,    79,    -1,    87,
+      -1,    88,    -1,    86,    -1,    24,    -1,    80,    -1,    65,
+      80,    -1,    81,    -1,    81,    66,    -1,    81,     6,    -1,
+       5,    82,    -1,    83,    -1,    84,    45,    83,    -1,    11,
+      49,    84,    50,    -1,    11,    18,    80,    -1,    11,    72,
+      18,    80,    -1,    28,    49,    84,    50,    -1,    28,    18,
+      80,    -1,    28,    72,    18,    80,    -1,    17,    49,    84,
+      50,    -1,    25,    -1,    25,    26,    27,     5,    -1,     5,
+       3,    81,    -1,     5,    19,    20,     3,    49,    62,    50,
+      -1,     5,     5,     3,    49,    62,    50,    -1,     5,     7,
+       3,    56,    -1,    89,    -1,    90,    -1,    91,    -1,    92,
+      91,    -1,     5,    49,    62,    50,    -1,     5,    49,    50,
+      -1,    29,    -1,    30,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint16 yyrline[] =
+{
+       0,   119,   119,   132,   133,   136,   140,   141,   144,   145,
+     148,   149,   152,   154,   159,   160,   164,   166,   171,   172,
+     176,   177,   178,   181,   183,   187,   188,   189,   192,   194,
+     195,   199,   200,   204,   205,   207,   208,   215,   218,   219,
+     222,   224,   230,   231,   234,   235,   239,   240,   244,   249,
+     250,   254,   255,   256,   261,   267,   270,   272,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   290,   291,   296,   297,   300,   303,   306,   307,   311,
+     313,   315,   320,   322,   324,   329,   333,   334,   339,   342,
+     346,   351,   357,   358,   361,   362,   366,   369,   393,   394
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "\"::=\"", "NUM", "IDENTIFIER",
+  "OPTIONAL", "INTEGER", "SIZE", "OCTET", "STRING", "SEQUENCE", "BIT",
+  "UNIVERSAL", "PRIVATE", "APPLICATION", "DEFAULT", "CHOICE", "OF",
+  "OBJECT", "STR_IDENTIFIER", "BOOLEAN", "ASN1_TRUE", "ASN1_FALSE",
+  "TOKEN_NULL", "ANY", "DEFINED", "BY", "SET", "EXPLICIT", "IMPLICIT",
+  "DEFINITIONS", "TAGS", "BEGIN", "END", "UTCTime", "GeneralizedTime",
+  "GeneralString", "FROM", "IMPORTS", "ENUMERATED", "'+'", "'-'", "'('",
+  "')'", "','", "'['", "']'", "'|'", "'{'", "'}'", "'.'", "$accept",
+  "definitions", "pos_num", "neg_num", "pos_neg_num", "num_identifier",
+  "pos_neg_identifier", "constant", "constant_list", "obj_constant",
+  "obj_constant_list", "class", "tag_type", "tag", "default",
+  "pos_neg_list", "integer_def", "boolean_def", "Time", "size_def2",
+  "size_def", "generalstring_def", "octet_string_def", "bit_element",
+  "bit_element_list", "bit_string_def", "enumerated_def", "object_def",
+  "type_assig_right", "type_assig_right_tag",
+  "type_assig_right_tag_default", "type_assig", "type_assig_list",
+  "sequence_def", "set_def", "choise_def", "any_def", "type_def",
+  "constant_def", "type_constant", "type_constant_list", "definitions_id",
+  "explicit_implicit", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,    43,    45,    40,    41,    44,    91,    93,   124,   123,
+     125,    46
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    52,    53,    54,    54,    55,    56,    56,    57,    57,
+      58,    58,    59,    59,    60,    60,    61,    61,    62,    62,
+      63,    63,    63,    64,    64,    65,    65,    65,    66,    66,
+      66,    67,    67,    68,    68,    68,    68,    69,    70,    70,
+      71,    71,    72,    72,    73,    73,    74,    74,    75,    76,
+      76,    77,    77,    77,    78,    79,    80,    80,    80,    80,
+      80,    80,    80,    80,    80,    80,    80,    80,    80,    80,
+      80,    81,    81,    82,    82,    82,    83,    84,    84,    85,
+      85,    85,    86,    86,    86,    87,    88,    88,    89,    90,
+      90,    90,    91,    91,    92,    92,    93,    93,    94,    94
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     8,     1,     2,     2,     1,     1,     1,     1,
+       1,     1,     3,     4,     1,     3,     1,     4,     1,     2,
+       1,     1,     1,     3,     4,     1,     2,     2,     2,     2,
+       2,     1,     3,     1,     4,     4,     7,     1,     1,     1,
+       4,     7,     1,     3,     1,     2,     2,     3,     4,     1,
+       3,     2,     3,     5,     4,     2,     1,     2,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     2,     1,     2,     2,     2,     1,     3,     4,
+       3,     4,     4,     3,     4,     4,     1,     4,     3,     7,
+       6,     4,     1,     1,     1,     2,     4,     3,     1,     1
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     0,     0,     0,     0,     1,     0,     8,     9,    97,
+      16,    18,     0,    98,    99,     0,     0,    96,    19,     0,
+       0,     0,    17,     0,     0,    92,    93,    94,     0,     0,
+       0,     0,     0,     2,    95,    56,    33,     0,     0,     0,
+       0,     0,    37,    70,    86,     0,    38,    39,    44,     0,
+       0,    25,     0,    58,    60,    61,    64,    62,    63,    59,
+      66,    71,    88,    65,    69,    67,    68,     0,     0,     0,
+       0,     0,    42,    57,     0,    46,     0,     0,     0,    51,
+       0,    55,     0,     0,     0,     0,    45,     0,     0,    20,
+      21,    22,     0,    26,    27,    72,     0,     0,     3,     0,
+       0,     6,     7,    91,     0,     0,     0,     0,     0,    14,
+       0,    47,    80,     0,    77,     0,     0,     0,    52,     0,
+       0,    83,     0,     0,     0,    49,     0,    23,     0,     3,
+       9,    31,     0,     0,     0,     4,     5,     0,     0,    43,
+       0,     0,     0,    34,    73,    76,     0,    79,    81,     0,
+      85,    87,    82,    84,     0,     0,    54,    24,     0,    35,
+       0,    90,     0,    40,     0,     0,    12,    15,    75,     0,
+      74,    78,    53,     0,    50,     0,    32,    89,     0,    13,
+      11,    29,    30,    10,    28,    48,     0,     0,    36,    41
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
+{
+      -1,     2,   101,   102,   103,    10,   184,   109,   110,    11,
+      12,    92,    51,    52,   170,   133,    53,    54,    55,    72,
+      73,    56,    57,   125,   126,    58,    59,    60,    61,    62,
+     145,   114,   115,    63,    64,    65,    66,    25,    26,    27,
+      28,     3,    15
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -96
+static const yytype_int16 yypact[] =
+{
+      24,   -14,    48,    56,     0,   -96,   -10,   -96,    -2,   -96,
+     -96,   -96,     2,   -96,   -96,    71,   111,   -96,   -96,   117,
+      83,    96,   -96,   127,    42,   -96,   -96,   -96,    10,    77,
+     130,   131,   115,   -96,   -96,     8,    90,   132,    13,   135,
+      92,   126,   -96,   -96,   122,    15,   -96,   -96,     8,   100,
+      93,    49,   119,    94,   -96,   -96,   -96,   -96,   -96,   -96,
+     -96,   -96,   -96,   -96,   -96,   -96,   -96,   102,    28,   149,
+     110,   150,   -96,   -96,    17,     8,   119,   152,   142,    22,
+     152,   -96,   134,   119,   152,   144,   -96,   158,   118,   -96,
+     -96,   -96,   160,   -96,   -96,   -96,    35,    88,   -96,   162,
+     163,   -96,   -96,   -96,   120,   114,   124,   128,    28,   -96,
+      -8,   -96,   -96,    77,   -96,    -7,   119,   158,   -96,    18,
+     165,   -96,    50,   119,   129,   -96,    54,   -96,   133,   123,
+     -96,   -96,   125,    37,     4,   -96,   -96,    88,   -27,   -96,
+      28,   137,    17,   -96,    20,   -96,   152,   -96,   -96,    66,
+     -96,   -96,   -96,   -96,   169,   158,   -96,   -96,   136,   -96,
+      28,   -96,     7,   -96,   138,   139,   -96,   -96,   -96,    68,
+     -96,   -96,   -96,   140,   -96,   114,   -96,   -96,   114,   -96,
+     -96,   -96,   -96,   -96,   -96,   -96,   141,   146,   -96,   -96
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
+{
+     -96,   -96,   -96,   -96,   -94,   -95,   -96,    33,   -96,   -12,
+     -84,   -96,   -96,   -96,   -96,   -96,   -96,   -96,   -96,   106,
+     -20,   -96,   -96,    23,    62,   -96,   -96,   -96,   -49,    69,
+     -96,    40,    41,   -96,   -96,   -96,   -96,   -96,   -96,   164,
+     -96,   -96,   -96
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -9
+static const yytype_int16 yytable[] =
+{
+      18,   132,   131,    95,     7,     8,     7,     8,     7,     8,
+     138,     7,     8,   134,   141,    24,    70,   163,    78,    13,
+      14,    70,   107,    70,   164,    85,   168,   112,    86,     1,
+      70,    76,    98,    83,   121,     4,   169,   142,   146,   129,
+     130,    16,   143,   147,    33,    29,   165,    30,     5,    31,
+       9,    71,    17,   162,   161,   111,    71,   177,    71,   118,
+     108,    32,    77,   146,    84,    71,   176,   148,   150,    99,
+     100,   117,    98,   180,   153,   183,    99,   100,    93,    94,
+     186,   159,    35,   187,    36,   160,    37,     6,    38,    39,
+     181,   182,     7,     8,    40,   146,    41,    88,    42,   155,
+     152,    43,    44,    19,   156,    45,    89,    90,    91,    99,
+     100,   155,    46,    47,    48,    20,   172,    49,     7,   130,
+      21,   119,    18,    50,    35,   122,    36,    22,    37,    23,
+      38,    39,    24,    67,    68,    69,    40,    96,    41,    74,
+      42,    80,    75,    43,    44,    79,    81,    45,    82,    87,
+      18,    97,   104,   105,    46,    47,    48,   113,    70,    49,
+     116,   120,   123,   124,   128,   127,   135,   136,   139,   137,
+     151,   140,   154,   173,    -8,   167,   158,   106,   174,   149,
+     157,   166,   144,   179,   185,   188,   171,   175,     0,   178,
+     189,     0,    34
+};
+
+static const yytype_int16 yycheck[] =
+{
+      12,    96,    96,    52,     4,     5,     4,     5,     4,     5,
+     105,     4,     5,    97,   108,     5,     8,    44,    38,    29,
+      30,     8,     5,     8,    51,    45,     6,    76,    48,     5,
+       8,    18,     4,    18,    83,    49,    16,    45,    45,     4,
+       5,    43,    50,    50,    34,     3,   140,     5,     0,     7,
+      50,    43,    50,   137,    50,    75,    43,    50,    43,    79,
+      43,    19,    49,    45,    49,    43,   160,   116,    50,    41,
+      42,    49,     4,     5,   123,   169,    41,    42,    29,    30,
+     175,    44,     5,   178,     7,    48,     9,    31,    11,    12,
+      22,    23,     4,     5,    17,    45,    19,     4,    21,    45,
+      50,    24,    25,    32,    50,    28,    13,    14,    15,    41,
+      42,    45,    35,    36,    37,     4,    50,    40,     4,     5,
+       3,    80,   134,    46,     5,    84,     7,    44,     9,    33,
+      11,    12,     5,     3,     3,    20,    17,    43,    19,    49,
+      21,    49,    10,    24,    25,    10,    20,    28,    26,    49,
+     162,    49,     3,    43,    35,    36,    37,     5,     8,    40,
+      18,    27,    18,     5,     4,    47,     4,     4,    44,    49,
+       5,    43,    43,     4,    51,   142,    51,    71,   155,   117,
+      47,    44,   113,    44,    44,    44,   146,    51,    -1,    51,
+      44,    -1,    28
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,     5,    53,    93,    49,     0,    31,     4,     5,    50,
+      57,    61,    62,    29,    30,    94,    43,    50,    61,    32,
+       4,     3,    44,    33,     5,    89,    90,    91,    92,     3,
+       5,     7,    19,    34,    91,     5,     7,     9,    11,    12,
+      17,    19,    21,    24,    25,    28,    35,    36,    37,    40,
+      46,    64,    65,    68,    69,    70,    73,    74,    77,    78,
+      79,    80,    81,    85,    86,    87,    88,     3,     3,    20,
+       8,    43,    71,    72,    49,    10,    18,    49,    72,    10,
+      49,    20,    26,    18,    49,    72,    72,    49,     4,    13,
+      14,    15,    63,    29,    30,    80,    43,    49,     4,    41,
+      42,    54,    55,    56,     3,    43,    71,     5,    43,    59,
+      60,    72,    80,     5,    83,    84,    18,    49,    72,    84,
+      27,    80,    84,    18,     5,    75,    76,    47,     4,     4,
+       5,    56,    57,    67,    62,     4,     4,    49,    57,    44,
+      43,    56,    45,    50,    81,    82,    45,    50,    80,    76,
+      50,     5,    50,    80,    43,    45,    50,    47,    51,    44,
+      48,    50,    62,    44,    51,    56,    44,    59,     6,    16,
+      66,    83,    50,     4,    75,    51,    56,    50,    51,    44,
+       5,    22,    23,    56,    58,    44,    57,    57,    44,    44
+};
+
+#define yyerrok                (yyerrstatus = 0)
+#define yyclearin      (yychar = YYEMPTY)
+#define YYEMPTY                (-2)
+#define YYEOF          0
+
+#define YYACCEPT       goto yyacceptlab
+#define YYABORT                goto yyabortlab
+#define YYERROR                goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL         goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)                                 \
+do                                                             \
+  if (yychar == YYEMPTY && yylen == 1)                         \
+    {                                                          \
+      yychar = (Token);                                                \
+      yylval = (Value);                                                \
+      yytoken = YYTRANSLATE (yychar);                          \
+      YYPOPSTACK (1);                                          \
+      goto yybackup;                                           \
+    }                                                          \
+  else                                                         \
+    {                                                          \
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;                                                 \
+    }                                                          \
+while (YYID (0))
+
+
+#define YYTERROR       1
+#define YYERRCODE      256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)                               \
+    do                                                                 \
+      if (YYID (N))                                                    \
+       {                                                               \
+         (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
+         (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
+         (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
+         (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
+       }                                                               \
+      else                                                             \
+       {                                                               \
+         (Current).first_line   = (Current).last_line   =              \
+           YYRHSLOC (Rhs, 0).last_line;                                \
+         (Current).first_column = (Current).last_column =              \
+           YYRHSLOC (Rhs, 0).last_column;                              \
+       }                                                               \
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)                 \
+     fprintf (File, "%d.%d-%d.%d",                     \
+             (Loc).first_line, (Loc).first_column,     \
+             (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)                       \
+do {                                           \
+  if (yydebug)                                 \
+    YYFPRINTF Args;                            \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
+do {                                                                     \
+  if (yydebug)                                                           \
+    {                                                                    \
+      YYFPRINTF (stderr, "%s ", Title);                                          \
+      yy_symbol_print (stderr,                                           \
+                 Type, Value); \
+      YYFPRINTF (stderr, "\n");                                                  \
+    }                                                                    \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+       break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)                           \
+do {                                                           \
+  if (yydebug)                                                 \
+    yy_stack_print ((Bottom), (Top));                          \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+            yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                      &(yyvsp[(yyi + 1) - (yynrhs)])
+                                      );
+      YYFPRINTF (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)         \
+do {                                   \
+  if (yydebug)                         \
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef        YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+\f
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+       switch (*++yyp)
+         {
+         case '\'':
+         case ',':
+           goto do_not_strip_quotes;
+
+         case '\\':
+           if (*++yyp != '\\')
+             goto do_not_strip_quotes;
+           /* Fall through.  */
+         default:
+           if (yyres)
+             yyres[yyn] = *yyp;
+           yyn++;
+           break;
+
+         case '"':
+           if (yyres)
+             yyres[yyn] = '\0';
+           return yyn;
+         }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+        constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+                   + sizeof yyexpecting - 1
+                   + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+                      * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+        YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+       if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+         {
+           if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+             {
+               yycount = 1;
+               yysize = yysize0;
+               yyformat[sizeof yyunexpected - 1] = '\0';
+               break;
+             }
+           yyarg[yycount++] = yytname[yyx];
+           yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+           yysize_overflow |= (yysize1 < yysize);
+           yysize = yysize1;
+           yyfmt = yystpcpy (yyfmt, yyprefix);
+           yyprefix = yyor;
+         }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+       return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+       {
+         /* Avoid sprintf, as that infringes on the user's name space.
+            Don't have undefined behavior even if the translation
+            produced a string with the wrong number of "%s"s.  */
+         char *yyp = yyresult;
+         int yyi = 0;
+         while ((*yyp = *yyf) != '\0')
+           {
+             if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+               {
+                 yyp += yytnamerr (yyp, yyarg[yyi++]);
+                 yyf += 2;
+               }
+             else
+               {
+                 yyp++;
+                 yyf++;
+               }
+           }
+       }
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+\f
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+       break;
+    }
+}
+
+/* Prevent warnings from -Wmissing-prototypes.  */
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+/* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+
+
+/*-------------------------.
+| yyparse or yypush_parse.  |
+`-------------------------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+
+
+    int yystate;
+    /* Number of tokens to shift before error messages enabled.  */
+    int yyerrstatus;
+
+    /* The stacks and their tools:
+       `yyss': related to states.
+       `yyvs': related to semantic values.
+
+       Refer to the stacks thru separate pointers, to allow yyoverflow
+       to reallocate them elsewhere.  */
+
+    /* The state stack.  */
+    yytype_int16 yyssa[YYINITDEPTH];
+    yytype_int16 *yyss;
+    yytype_int16 *yyssp;
+
+    /* The semantic value stack.  */
+    YYSTYPE yyvsa[YYINITDEPTH];
+    YYSTYPE *yyvs;
+    YYSTYPE *yyvsp;
+
+    YYSIZE_T yystacksize;
+
+  int yyn;
+  int yyresult;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken;
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  yytoken = 0;
+  yyss = yyssa;
+  yyvs = yyvsa;
+  yystacksize = YYINITDEPTH;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY; /* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+       /* Give user a chance to reallocate the stack.  Use copies of
+          these so that the &'s don't force the real ones into
+          memory.  */
+       YYSTYPE *yyvs1 = yyvs;
+       yytype_int16 *yyss1 = yyss;
+
+       /* Each stack pointer address is followed by the size of the
+          data in use in that stack, in bytes.  This used to be a
+          conditional around just the two extra args, but that might
+          be undefined if yyoverflow is a macro.  */
+       yyoverflow (YY_("memory exhausted"),
+                   &yyss1, yysize * sizeof (*yyssp),
+                   &yyvs1, yysize * sizeof (*yyvsp),
+                   &yystacksize);
+
+       yyss = yyss1;
+       yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+       goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+       yystacksize = YYMAXDEPTH;
+
+      {
+       yytype_int16 *yyss1 = yyss;
+       union yyalloc *yyptr =
+         (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+       if (! yyptr)
+         goto yyexhaustedlab;
+       YYSTACK_RELOCATE (yyss_alloc, yyss);
+       YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+#  undef YYSTACK_RELOCATE
+       if (yyss1 != yyssa)
+         YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+                 (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+       YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+       goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+
+/* Line 1455 of yacc.c  */
+#line 122 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFINITIONS|(yyvsp[(3) - (8)].constant));
+                    _asn1_set_name((yyval.node),_asn1_get_name((yyvsp[(1) - (8)].node)));
+                    _asn1_set_name((yyvsp[(1) - (8)].node),"");
+                    _asn1_set_right((yyvsp[(1) - (8)].node),(yyvsp[(7) - (8)].node));
+                    _asn1_set_down((yyval.node),(yyvsp[(1) - (8)].node));
+
+                   p_tree=(yyval.node);
+                   }
+    break;
+
+  case 3:
+
+/* Line 1455 of yacc.c  */
+#line 132 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 4:
+
+/* Line 1455 of yacc.c  */
+#line 133 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(2) - (2)].str));}
+    break;
+
+  case 5:
+
+/* Line 1455 of yacc.c  */
+#line 136 "ASN1.y"
+    {strcpy((yyval.str),"-");
+                       strcat((yyval.str),(yyvsp[(2) - (2)].str));}
+    break;
+
+  case 6:
+
+/* Line 1455 of yacc.c  */
+#line 140 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 7:
+
+/* Line 1455 of yacc.c  */
+#line 141 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 8:
+
+/* Line 1455 of yacc.c  */
+#line 144 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 9:
+
+/* Line 1455 of yacc.c  */
+#line 145 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 10:
+
+/* Line 1455 of yacc.c  */
+#line 148 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 11:
+
+/* Line 1455 of yacc.c  */
+#line 149 "ASN1.y"
+    {strcpy((yyval.str),(yyvsp[(1) - (1)].str));}
+    break;
+
+  case 12:
+
+/* Line 1455 of yacc.c  */
+#line 152 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                       _asn1_set_value((yyval.node),(yyvsp[(2) - (3)].str),strlen((yyvsp[(2) - (3)].str))+1);}
+    break;
+
+  case 13:
+
+/* Line 1455 of yacc.c  */
+#line 154 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                      _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                                       _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 14:
+
+/* Line 1455 of yacc.c  */
+#line 159 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 15:
+
+/* Line 1455 of yacc.c  */
+#line 160 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (3)].node);
+                                            _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 16:
+
+/* Line 1455 of yacc.c  */
+#line 164 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                   _asn1_set_value((yyval.node),(yyvsp[(1) - (1)].str),strlen((yyvsp[(1) - (1)].str))+1);}
+    break;
+
+  case 17:
+
+/* Line 1455 of yacc.c  */
+#line 166 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                   _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                                    _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 18:
+
+/* Line 1455 of yacc.c  */
+#line 171 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 19:
+
+/* Line 1455 of yacc.c  */
+#line 172 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (2)].node);
+                                                    _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (2)].node)),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 20:
+
+/* Line 1455 of yacc.c  */
+#line 176 "ASN1.y"
+    {(yyval.constant)=CONST_UNIVERSAL;}
+    break;
+
+  case 21:
+
+/* Line 1455 of yacc.c  */
+#line 177 "ASN1.y"
+    {(yyval.constant)=CONST_PRIVATE;}
+    break;
+
+  case 22:
+
+/* Line 1455 of yacc.c  */
+#line 178 "ASN1.y"
+    {(yyval.constant)=CONST_APPLICATION;}
+    break;
+
+  case 23:
+
+/* Line 1455 of yacc.c  */
+#line 181 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TAG);
+                            _asn1_set_value((yyval.node),(yyvsp[(2) - (3)].str),strlen((yyvsp[(2) - (3)].str))+1);}
+    break;
+
+  case 24:
+
+/* Line 1455 of yacc.c  */
+#line 183 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TAG | (yyvsp[(2) - (4)].constant));
+                                _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 25:
+
+/* Line 1455 of yacc.c  */
+#line 187 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 26:
+
+/* Line 1455 of yacc.c  */
+#line 188 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_EXPLICIT);}
+    break;
+
+  case 27:
+
+/* Line 1455 of yacc.c  */
+#line 189 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_IMPLICIT);}
+    break;
+
+  case 28:
+
+/* Line 1455 of yacc.c  */
+#line 192 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFAULT);
+                                       _asn1_set_value((yyval.node),(yyvsp[(2) - (2)].str),strlen((yyvsp[(2) - (2)].str))+1);}
+    break;
+
+  case 29:
+
+/* Line 1455 of yacc.c  */
+#line 194 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFAULT|CONST_TRUE);}
+    break;
+
+  case 30:
+
+/* Line 1455 of yacc.c  */
+#line 195 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_DEFAULT|CONST_FALSE);}
+    break;
+
+  case 33:
+
+/* Line 1455 of yacc.c  */
+#line 204 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER);}
+    break;
+
+  case 34:
+
+/* Line 1455 of yacc.c  */
+#line 205 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_LIST);
+                                        _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 35:
+
+/* Line 1455 of yacc.c  */
+#line 207 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER);}
+    break;
+
+  case 36:
+
+/* Line 1455 of yacc.c  */
+#line 209 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_MIN_MAX);
+                                         _asn1_set_down((yyval.node),_asn1_add_node(TYPE_SIZE));
+                                         _asn1_set_value(_asn1_get_down((yyval.node)),(yyvsp[(6) - (7)].str),strlen((yyvsp[(6) - (7)].str))+1);
+                                         _asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[(3) - (7)].str));}
+    break;
+
+  case 37:
+
+/* Line 1455 of yacc.c  */
+#line 215 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BOOLEAN);}
+    break;
+
+  case 38:
+
+/* Line 1455 of yacc.c  */
+#line 218 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TIME|CONST_UTC);}
+    break;
+
+  case 39:
+
+/* Line 1455 of yacc.c  */
+#line 219 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_TIME|CONST_GENERALIZED);}
+    break;
+
+  case 40:
+
+/* Line 1455 of yacc.c  */
+#line 222 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SIZE|CONST_1_PARAM);
+                                     _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 41:
+
+/* Line 1455 of yacc.c  */
+#line 225 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SIZE|CONST_MIN_MAX);
+                                     _asn1_set_value((yyval.node),(yyvsp[(3) - (7)].str),strlen((yyvsp[(3) - (7)].str))+1);
+                                      _asn1_set_name((yyval.node),(yyvsp[(6) - (7)].str));}
+    break;
+
+  case 42:
+
+/* Line 1455 of yacc.c  */
+#line 230 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 43:
+
+/* Line 1455 of yacc.c  */
+#line 231 "ASN1.y"
+    {(yyval.node)=(yyvsp[(2) - (3)].node);}
+    break;
+
+  case 44:
+
+/* Line 1455 of yacc.c  */
+#line 234 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_GENERALSTRING);}
+    break;
+
+  case 45:
+
+/* Line 1455 of yacc.c  */
+#line 235 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_GENERALSTRING|CONST_SIZE);
+                                         _asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 46:
+
+/* Line 1455 of yacc.c  */
+#line 239 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OCTET_STRING);}
+    break;
+
+  case 47:
+
+/* Line 1455 of yacc.c  */
+#line 240 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OCTET_STRING|CONST_SIZE);
+                                           _asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 48:
+
+/* Line 1455 of yacc.c  */
+#line 244 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CONSTANT);
+                                  _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                                    _asn1_set_value((yyval.node),(yyvsp[(3) - (4)].str),strlen((yyvsp[(3) - (4)].str))+1);}
+    break;
+
+  case 49:
+
+/* Line 1455 of yacc.c  */
+#line 249 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 50:
+
+/* Line 1455 of yacc.c  */
+#line 250 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (3)].node);
+                                                       _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 51:
+
+/* Line 1455 of yacc.c  */
+#line 254 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING);}
+    break;
+
+  case 52:
+
+/* Line 1455 of yacc.c  */
+#line 255 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING|CONST_SIZE);}
+    break;
+
+  case 53:
+
+/* Line 1455 of yacc.c  */
+#line 257 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_BIT_STRING|CONST_LIST);
+                                _asn1_set_down((yyval.node),(yyvsp[(4) - (5)].node));}
+    break;
+
+  case 54:
+
+/* Line 1455 of yacc.c  */
+#line 262 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_ENUMERATED|CONST_LIST);
+                                _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 55:
+
+/* Line 1455 of yacc.c  */
+#line 267 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);}
+    break;
+
+  case 56:
+
+/* Line 1455 of yacc.c  */
+#line 270 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_IDENTIFIER);
+                                       _asn1_set_value((yyval.node),(yyvsp[(1) - (1)].str),strlen((yyvsp[(1) - (1)].str))+1);}
+    break;
+
+  case 57:
+
+/* Line 1455 of yacc.c  */
+#line 272 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_IDENTIFIER|CONST_SIZE);
+                                       _asn1_set_value((yyval.node),(yyvsp[(1) - (2)].str),strlen((yyvsp[(1) - (2)].str))+1);
+                                       _asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 58:
+
+/* Line 1455 of yacc.c  */
+#line 275 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 59:
+
+/* Line 1455 of yacc.c  */
+#line 276 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 60:
+
+/* Line 1455 of yacc.c  */
+#line 277 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 62:
+
+/* Line 1455 of yacc.c  */
+#line 279 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 63:
+
+/* Line 1455 of yacc.c  */
+#line 280 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 64:
+
+/* Line 1455 of yacc.c  */
+#line 281 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 65:
+
+/* Line 1455 of yacc.c  */
+#line 282 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 66:
+
+/* Line 1455 of yacc.c  */
+#line 283 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 67:
+
+/* Line 1455 of yacc.c  */
+#line 284 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 68:
+
+/* Line 1455 of yacc.c  */
+#line 285 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 69:
+
+/* Line 1455 of yacc.c  */
+#line 286 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 70:
+
+/* Line 1455 of yacc.c  */
+#line 287 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_NULL);}
+    break;
+
+  case 71:
+
+/* Line 1455 of yacc.c  */
+#line 290 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 72:
+
+/* Line 1455 of yacc.c  */
+#line 291 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(2) - (2)].node),CONST_TAG);
+                                               _asn1_set_right((yyvsp[(1) - (2)].node),_asn1_get_down((yyval.node)));
+                                               _asn1_set_down((yyval.node),(yyvsp[(1) - (2)].node));}
+    break;
+
+  case 73:
+
+/* Line 1455 of yacc.c  */
+#line 296 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 74:
+
+/* Line 1455 of yacc.c  */
+#line 297 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_DEFAULT);
+                                                       _asn1_set_right((yyvsp[(2) - (2)].node),_asn1_get_down((yyval.node)));
+                                                      _asn1_set_down((yyval.node),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 75:
+
+/* Line 1455 of yacc.c  */
+#line 300 "ASN1.y"
+    {(yyval.node)=_asn1_mod_type((yyvsp[(1) - (2)].node),CONST_OPTION);}
+    break;
+
+  case 76:
+
+/* Line 1455 of yacc.c  */
+#line 303 "ASN1.y"
+    {(yyval.node)=_asn1_set_name((yyvsp[(2) - (2)].node),(yyvsp[(1) - (2)].str));}
+    break;
+
+  case 77:
+
+/* Line 1455 of yacc.c  */
+#line 306 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 78:
+
+/* Line 1455 of yacc.c  */
+#line 307 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (3)].node);
+                                                _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (3)].node)),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 79:
+
+/* Line 1455 of yacc.c  */
+#line 311 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE);
+                                              _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 80:
+
+/* Line 1455 of yacc.c  */
+#line 313 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE_OF);
+                                              _asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 81:
+
+/* Line 1455 of yacc.c  */
+#line 315 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SEQUENCE_OF|CONST_SIZE);
+                                            _asn1_set_right((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node));
+                                            _asn1_set_down((yyval.node),(yyvsp[(2) - (4)].node));}
+    break;
+
+  case 82:
+
+/* Line 1455 of yacc.c  */
+#line 320 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SET);
+                                     _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 83:
+
+/* Line 1455 of yacc.c  */
+#line 322 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SET_OF);
+                                     _asn1_set_down((yyval.node),(yyvsp[(3) - (3)].node));}
+    break;
+
+  case 84:
+
+/* Line 1455 of yacc.c  */
+#line 324 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_SET_OF|CONST_SIZE);
+                                       _asn1_set_right((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node));
+                                       _asn1_set_down((yyval.node),(yyvsp[(2) - (4)].node));}
+    break;
+
+  case 85:
+
+/* Line 1455 of yacc.c  */
+#line 329 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_CHOICE);
+                                             _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));}
+    break;
+
+  case 86:
+
+/* Line 1455 of yacc.c  */
+#line 333 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_ANY);}
+    break;
+
+  case 87:
+
+/* Line 1455 of yacc.c  */
+#line 334 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_ANY|CONST_DEFINED_BY);
+                                        _asn1_set_down((yyval.node),_asn1_add_node(TYPE_CONSTANT));
+                                       _asn1_set_name(_asn1_get_down((yyval.node)),(yyvsp[(4) - (4)].str));}
+    break;
+
+  case 88:
+
+/* Line 1455 of yacc.c  */
+#line 339 "ASN1.y"
+    {(yyval.node)=_asn1_set_name((yyvsp[(3) - (3)].node),(yyvsp[(1) - (3)].str));}
+    break;
+
+  case 89:
+
+/* Line 1455 of yacc.c  */
+#line 343 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN);
+                         _asn1_set_name((yyval.node),(yyvsp[(1) - (7)].str));
+                         _asn1_set_down((yyval.node),(yyvsp[(6) - (7)].node));}
+    break;
+
+  case 90:
+
+/* Line 1455 of yacc.c  */
+#line 347 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN|CONST_1_PARAM);
+                         _asn1_set_name((yyval.node),(yyvsp[(1) - (6)].str));
+                         _asn1_set_value((yyval.node),(yyvsp[(2) - (6)].str),strlen((yyvsp[(2) - (6)].str))+1);
+                         _asn1_set_down((yyval.node),(yyvsp[(5) - (6)].node));}
+    break;
+
+  case 91:
+
+/* Line 1455 of yacc.c  */
+#line 352 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_INTEGER|CONST_ASSIGN);
+                         _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));
+                         _asn1_set_value((yyval.node),(yyvsp[(4) - (4)].str),strlen((yyvsp[(4) - (4)].str))+1);}
+    break;
+
+  case 92:
+
+/* Line 1455 of yacc.c  */
+#line 357 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 93:
+
+/* Line 1455 of yacc.c  */
+#line 358 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 94:
+
+/* Line 1455 of yacc.c  */
+#line 361 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (1)].node);}
+    break;
+
+  case 95:
+
+/* Line 1455 of yacc.c  */
+#line 362 "ASN1.y"
+    {(yyval.node)=(yyvsp[(1) - (2)].node);
+                                                          _asn1_set_right(_asn1_get_last_right((yyvsp[(1) - (2)].node)),(yyvsp[(2) - (2)].node));}
+    break;
+
+  case 96:
+
+/* Line 1455 of yacc.c  */
+#line 366 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);
+                                                          _asn1_set_down((yyval.node),(yyvsp[(3) - (4)].node));
+                                                          _asn1_set_name((yyval.node),(yyvsp[(1) - (4)].str));}
+    break;
+
+  case 97:
+
+/* Line 1455 of yacc.c  */
+#line 369 "ASN1.y"
+    {(yyval.node)=_asn1_add_node(TYPE_OBJECT_ID);
+                                                          _asn1_set_name((yyval.node),(yyvsp[(1) - (3)].str));}
+    break;
+
+  case 98:
+
+/* Line 1455 of yacc.c  */
+#line 393 "ASN1.y"
+    {(yyval.constant)=CONST_EXPLICIT;}
+    break;
+
+  case 99:
+
+/* Line 1455 of yacc.c  */
+#line 394 "ASN1.y"
+    {(yyval.constant)=CONST_IMPLICIT;}
+    break;
+
+
+
+/* Line 1455 of yacc.c  */
+#line 2371 "ASN1.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+       YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+       if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+         {
+           YYSIZE_T yyalloc = 2 * yysize;
+           if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+             yyalloc = YYSTACK_ALLOC_MAXIMUM;
+           if (yymsg != yymsgbuf)
+             YYSTACK_FREE (yymsg);
+           yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+           if (yymsg)
+             yymsg_alloc = yyalloc;
+           else
+             {
+               yymsg = yymsgbuf;
+               yymsg_alloc = sizeof yymsgbuf;
+             }
+         }
+
+       if (0 < yysize && yysize <= yymsg_alloc)
+         {
+           (void) yysyntax_error (yymsg, yystate, yychar);
+           yyerror (yymsg);
+         }
+       else
+         {
+           yyerror (YY_("syntax error"));
+           if (yysize != 0)
+             goto yyexhaustedlab;
+         }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+        error, discard it.  */
+
+      if (yychar <= YYEOF)
+       {
+         /* Return failure if at end of input.  */
+         if (yychar == YYEOF)
+           YYABORT;
+       }
+      else
+       {
+         yydestruct ("Error: discarding",
+                     yytoken, &yylval);
+         yychar = YYEMPTY;
+       }
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;     /* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+       {
+         yyn += YYTERROR;
+         if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+           {
+             yyn = yytable[yyn];
+             if (0 < yyn)
+               break;
+           }
+       }
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+       YYABORT;
+
+
+      yydestruct ("Error: popping",
+                 yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#if !defined(yyoverflow) || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+                yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+                 yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+
+/* Line 1675 of yacc.c  */
+#line 398 "ASN1.y"
+
+
+
+
+static const char *key_word[] = {
+  "::=","OPTIONAL","INTEGER","SIZE","OCTET","STRING"
+  ,"SEQUENCE","BIT","UNIVERSAL","PRIVATE","OPTIONAL"
+  ,"DEFAULT","CHOICE","OF","OBJECT","IDENTIFIER"
+  ,"BOOLEAN","TRUE","FALSE","APPLICATION","ANY","DEFINED"
+  ,"SET","BY","EXPLICIT","IMPLICIT","DEFINITIONS","TAGS"
+  ,"BEGIN","END","UTCTime","GeneralizedTime"
+  ,"GeneralString","FROM","IMPORTS","NULL","ENUMERATED"};
+static const int key_word_token[] = {
+  ASSIG,OPTIONAL,INTEGER,SIZE,OCTET,STRING
+  ,SEQUENCE,BIT,UNIVERSAL,PRIVATE,OPTIONAL
+  ,DEFAULT,CHOICE,OF,OBJECT,STR_IDENTIFIER
+  ,BOOLEAN,ASN1_TRUE,ASN1_FALSE,APPLICATION,ANY,DEFINED
+  ,SET,BY,EXPLICIT,IMPLICIT,DEFINITIONS,TAGS
+  ,BEGIN,END,UTCTime,GeneralizedTime
+  ,GeneralString,FROM,IMPORTS,TOKEN_NULL,ENUMERATED};
+
+/*************************************************************/
+/*  Function: _asn1_yylex                                    */
+/*  Description: looks for tokens in file_asn1 pointer file. */
+/*  Return: int                                              */
+/*    Token identifier or ASCII code or 0(zero: End Of File) */
+/*************************************************************/
+static int
+_asn1_yylex()
+{
+  int c,counter=0,k,lastc;
+  char string[ASN1_MAX_NAME_SIZE+1]; /* will contain the next token */
+  size_t i;
+
+  while(1)
+    {
+    while((c=fgetc(file_asn1))==' ' || c=='\t' || c=='\n')
+      if(c=='\n') lineNumber++;
+
+    if(c==EOF){
+      strcpy(lastToken,"End Of File");
+      return 0;
+    }
+
+    if(c=='(' || c==')' || c=='[' || c==']' ||
+       c=='{' || c=='}' || c==',' || c=='.' ||
+       c=='+' || c=='|'){
+      lastToken[0]=c;lastToken[1]=0;
+      return c;
+    }
+    if(c=='-'){  /* Maybe the first '-' of a comment */
+      if((c=fgetc(file_asn1))!='-'){
+       ungetc(c,file_asn1);
+       lastToken[0]='-';lastToken[1]=0;
+       return '-';
+      }
+      else{ /* Comments */
+       lastc=0;
+       counter=0;
+       /* A comment finishes at the next double hypen or the end of line */
+       while((c=fgetc(file_asn1))!=EOF && c!='\n' &&
+             (lastc!='-' || (lastc=='-' && c!='-')))
+         lastc=c;
+       if(c==EOF){
+         strcpy(lastToken,"End Of File");
+         return 0;
+       }
+       else{
+         if(c=='\n') lineNumber++;
+         continue; /* next char, please! (repeat the search) */
+       }
+      }
+    }
+    string[counter++]=c;
+    /* Till the end of the token */
+    while(!((c=fgetc(file_asn1))==EOF || c==' '|| c=='\t' || c=='\n' ||
+            c=='(' || c==')' || c=='[' || c==']' ||
+            c=='{' || c=='}' || c==',' || c=='.'))
+      {
+       if(counter>=ASN1_MAX_NAME_SIZE){
+         result_parse=ASN1_NAME_TOO_LONG;
+         return 0;
+       }
+       string[counter++]=c;
+      }
+    ungetc(c,file_asn1);
+    string[counter]=0;
+    strcpy(lastToken,string);
+
+    /* Is STRING a number? */
+    for(k=0;k<counter;k++)
+      if(!isdigit(string[k])) break;
+    if(k>=counter)
+      {
+      strcpy(yylval.str,string);
+      return NUM; /* return the number */
+      }
+
+    /* Is STRING a keyword? */
+    for(i=0;i<(sizeof(key_word)/sizeof(char*));i++)
+      if(!strcmp(string,key_word[i])) return key_word_token[i];
+
+    /* STRING is an IDENTIFIER */
+    strcpy(yylval.str,string);
+    return IDENTIFIER;
+    }
+}
+
+/*************************************************************/
+/*  Function: _asn1_create_errorDescription                  */
+/*  Description: creates a string with the description of the*/
+/*    error.                                                 */
+/*  Parameters:                                              */
+/*    error : error to describe.                             */
+/*    errorDescription: string that will contain the         */
+/*                      description.                         */
+/*************************************************************/
+static void
+_asn1_create_errorDescription(int error,char *errorDescription)
+{
+  switch(error){
+  case ASN1_SUCCESS: case ASN1_FILE_NOT_FOUND:
+    if (errorDescription!=NULL) errorDescription[0]=0;
+    break;
+  case ASN1_SYNTAX_ERROR:
+    if (errorDescription!=NULL) {
+       strcpy(errorDescription,fileName);
+       strcat(errorDescription,":");
+       _asn1_ltostr(lineNumber,errorDescription+strlen(fileName)+1);
+       strcat(errorDescription,": parse error near '");
+       strcat(errorDescription,lastToken);
+       strcat(errorDescription,"'");
+    }
+    break;
+  case ASN1_NAME_TOO_LONG:
+    if (errorDescription!=NULL) {
+       strcpy(errorDescription,fileName);
+       strcat(errorDescription,":");
+       _asn1_ltostr(lineNumber,errorDescription+strlen(fileName)+1);
+       strcat(errorDescription,": name too long (more than ");
+       _asn1_ltostr(ASN1_MAX_NAME_SIZE,errorDescription+strlen(errorDescription));
+       strcat(errorDescription," characters)");
+    }
+    break;
+  case ASN1_IDENTIFIER_NOT_FOUND:
+    if (errorDescription!=NULL) {
+       strcpy(errorDescription,fileName);
+       strcat(errorDescription,":");
+       strcat(errorDescription,": identifier '");
+       strcat(errorDescription,_asn1_identifierMissing);
+       strcat(errorDescription,"' not found");
+    }
+    break;
+  default:
+    if (errorDescription!=NULL) errorDescription[0]=0;
+    break;
+  }
+
+}
+
+/**
+ * asn1_parser2tree:
+ * @file_name: specify the path and the name of file that contains
+ *   ASN.1 declarations.
+ * @definitions: return the pointer to the structure created from
+ *   "file_name" ASN.1 declarations.
+ * @errorDescription: 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_name file.
+ *
+ * Returns:
+ *
+ * %ASN1_SUCCESS: The file has a correct syntax and every identifier
+ * is known.
+ *
+ * %ASN1_ELEMENT_NOT_EMPTY: @definitions not %ASN1_TYPE_EMPTY.
+ *
+ * %ASN1_FILE_NOT_FOUND: An error occured while opening @file_name.
+ *
+ * %ASN1_SYNTAX_ERROR: The syntax is not correct.
+ *
+ * %ASN1_IDENTIFIER_NOT_FOUND: In the file there is an identifier that
+ * is not defined.
+ *
+ * %ASN1_NAME_TOO_LONG: In the file there is an identifier whith more
+ * than %ASN1_MAX_NAME_SIZE characters.
+ **/
+asn1_retCode
+asn1_parser2tree(const char *file_name, ASN1_TYPE *definitions,
+                char *errorDescription){
+
+  p_tree=ASN1_TYPE_EMPTY;
+
+  if(*definitions != ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_EMPTY;
+
+  *definitions=ASN1_TYPE_EMPTY;
+
+  fileName = file_name;
+
+  /* open the file to parse */
+  file_asn1=fopen(file_name,"r");
+
+  if(file_asn1==NULL){
+    result_parse=ASN1_FILE_NOT_FOUND;
+  }
+  else{
+    result_parse=ASN1_SUCCESS;
+
+    lineNumber=1;
+    yyparse();
+
+    fclose(file_asn1);
+
+    if(result_parse==ASN1_SUCCESS){ /* syntax OK */
+      /* set IMPLICIT or EXPLICIT property */
+      _asn1_set_default_tag(p_tree);
+      /* set CONST_SET and CONST_NOT_USED */
+      _asn1_type_set_config(p_tree);
+      /* check the identifier definitions */
+      result_parse=_asn1_check_identifier(p_tree);
+      if(result_parse==ASN1_SUCCESS){ /* all identifier defined */
+       /* Delete the list and keep the ASN1 structure */
+       _asn1_delete_list();
+       /* Convert into DER coding the value assign to INTEGER constants */
+       _asn1_change_integer_value(p_tree);
+       /* Expand the IDs of OBJECT IDENTIFIER constants */
+       _asn1_expand_object_id(p_tree);
+
+       *definitions=p_tree;
+      }
+      else /* some identifiers not defined */
+       /* Delete the list and the ASN1 structure */
+       _asn1_delete_list_and_nodes();
+    }
+    else  /* syntax error */
+      /* Delete the list and the ASN1 structure */
+      _asn1_delete_list_and_nodes();
+  }
+
+  if (errorDescription!=NULL)
+       _asn1_create_errorDescription(result_parse,errorDescription);
+
+  return result_parse;
+}
+
+/**
+ * asn1_parser2array:
+ * @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.
+ * @errorDescription : 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: The file has a correct syntax and every identifier
+ *   is known.
+ *
+ * %ASN1_FILE_NOT_FOUND: An error occured while opening @inputFileName.
+ *
+ * %ASN1_SYNTAX_ERROR: The syntax is not correct.
+ *
+ * %ASN1_IDENTIFIER_NOT_FOUND: In the file there is an identifier that
+ *   is not defined.
+ *
+ * %ASN1_NAME_TOO_LONG: In the file there is an identifier whith more
+ *   than %ASN1_MAX_NAME_SIZE characters.
+ **/
+int asn1_parser2array(const char *inputFileName,const char *outputFileName,
+                     const char *vectorName,char *errorDescription){
+  char *file_out_name=NULL;
+  char *vector_name=NULL;
+  const char *char_p,*slash_p,*dot_p;
+
+  p_tree=NULL;
+
+  fileName = inputFileName;
+
+  /* open the file to parse */
+  file_asn1=fopen(inputFileName,"r");
+
+  if(file_asn1==NULL)
+    result_parse=ASN1_FILE_NOT_FOUND;
+  else{
+    result_parse=ASN1_SUCCESS;
+
+    lineNumber=1;
+    yyparse();
+
+    fclose(file_asn1);
+
+    if(result_parse==ASN1_SUCCESS){ /* syntax OK */
+      /* set IMPLICIT or EXPLICIT property */
+      _asn1_set_default_tag(p_tree);
+      /* set CONST_SET and CONST_NOT_USED */
+      _asn1_type_set_config(p_tree);
+      /* check the identifier definitions */
+      result_parse=_asn1_check_identifier(p_tree);
+
+      if(result_parse==ASN1_SUCCESS){ /* all identifier defined */
+
+       /* searching the last '/' and '.' in inputFileName */
+       char_p=inputFileName;
+       slash_p=inputFileName;
+       while((char_p=strchr(char_p,'/'))){
+         char_p++;
+         slash_p=char_p;
+       }
+
+       char_p=slash_p;
+       dot_p=inputFileName+strlen(inputFileName);
+
+       while((char_p=strchr(char_p,'.'))){
+         dot_p=char_p;
+         char_p++;
+       }
+
+       if(outputFileName == NULL){
+         /* file_out_name = inputFileName + _asn1_tab.c */
+         file_out_name=(char *)malloc(dot_p-inputFileName+1+
+                                      strlen("_asn1_tab.c"));
+         memcpy(file_out_name,inputFileName,dot_p-inputFileName);
+         file_out_name[dot_p-inputFileName]=0;
+         strcat(file_out_name,"_asn1_tab.c");
+       }
+       else{
+         /* file_out_name = inputFileName */
+         file_out_name=(char *)malloc(strlen(outputFileName)+1);
+         strcpy(file_out_name,outputFileName);
+       }
+
+       if(vectorName == NULL){
+         /* vector_name = file name + _asn1_tab */
+         vector_name=(char *)malloc(dot_p-slash_p+1+
+                                    strlen("_asn1_tab"));
+         memcpy(vector_name,slash_p,dot_p-slash_p);
+         vector_name[dot_p-slash_p]=0;
+         strcat(vector_name,"_asn1_tab");
+       }
+       else{
+         /* vector_name = vectorName */
+         vector_name=(char *)malloc(strlen(vectorName)+1);
+         strcpy(vector_name,vectorName);
+       }
+
+       /* Save structure in a file */
+       _asn1_create_static_structure(p_tree,
+                                     file_out_name,vector_name);
+
+       free(file_out_name);
+       free(vector_name);
+      } /* result == OK */
+    }   /* result == OK */
+
+    /* Delete the list and the ASN1 structure */
+    _asn1_delete_list_and_nodes();
+  } /* inputFile exist */
+
+  if (errorDescription!=NULL)
+       _asn1_create_errorDescription(result_parse,errorDescription);
+
+  return result_parse;
+}
+
+/*************************************************************/
+/*  Function: _asn1_yyerror                                  */
+/*  Description: function called when there are syntax errors*/
+/*  Parameters:                                              */
+/*    char *s : error description                            */
+/*  Return: int                                              */
+/*                                                           */
+/*************************************************************/
+static int _asn1_yyerror (const char *s)
+{
+  /* Sends the error description to the std_out */
+
+#if 0
+  printf("_asn1_yyerror:%s:%ld: %s (Last Token:'%s')\n",fileName,
+        lineNumber,s,lastToken);
+#endif
+
+  if(result_parse!=ASN1_NAME_TOO_LONG)
+    result_parse=ASN1_SYNTAX_ERROR;
+
+  return 0;
+}
+
diff --git a/lib/ASN1.y b/lib/ASN1.y
new file mode 100644 (file)
index 0000000..ff74927
--- /dev/null
@@ -0,0 +1,795 @@
+%{
+/*
+ * Copyright (C) 2001, 2002, 2004, 2005, 2006, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+/*****************************************************/
+/* File: x509_ASN.y                                  */
+/* Description: input file for 'bison' program.      */
+/*   The output file is a parser (in C language) for */
+/*   ASN.1 syntax                                    */
+/*****************************************************/
+
+#include <int.h>
+#include <parser_aux.h>
+#include <structure.h>
+
+static FILE *file_asn1;                        /* Pointer to file to parse */
+static asn1_retCode result_parse;      /* result of the parser
+                                          algorithm */
+static ASN1_TYPE p_tree;               /* pointer to the root of the
+                                          structure created by the
+                                          parser*/
+static unsigned long lineNumber;       /* line number describing the
+                                          parser position inside the
+                                          file */
+static char lastToken[ASN1_MAX_NAME_SIZE+1];   /* last token find in the file
+                                          to parse before the 'parse
+                                          error' */
+extern char _asn1_identifierMissing[];
+static const char *fileName;           /* file to parse */
+
+static int _asn1_yyerror (const char *);
+static int _asn1_yylex(void);
+
+%}
+
+/* Prefix symbols and functions with _asn1_ */
+%name-prefix="_asn1_yy"
+
+%union {
+  unsigned int constant;
+  char str[ASN1_MAX_NAME_SIZE+1];
+  ASN1_TYPE node;
+}
+
+
+%token ASSIG "::="
+%token <str> NUM
+%token <str> IDENTIFIER
+%token OPTIONAL
+%token INTEGER
+%token SIZE
+%token OCTET
+%token STRING
+%token SEQUENCE
+%token BIT
+%token UNIVERSAL
+%token PRIVATE
+%token APPLICATION
+%token DEFAULT
+%token CHOICE
+%token OF
+%token OBJECT
+%token STR_IDENTIFIER
+%token BOOLEAN
+%token ASN1_TRUE
+%token ASN1_FALSE
+%token TOKEN_NULL
+%token ANY
+%token DEFINED
+%token BY
+%token SET
+%token EXPLICIT
+%token IMPLICIT
+%token DEFINITIONS
+%token TAGS
+%token BEGIN
+%token END
+%token UTCTime
+%token GeneralizedTime
+%token GeneralString
+%token FROM
+%token IMPORTS
+%token ENUMERATED
+
+%type <node> octet_string_def constant constant_list type_assig_right
+%type <node> integer_def type_assig type_assig_list sequence_def type_def
+%type <node> bit_string_def default size_def choise_def object_def
+%type <node> boolean_def any_def size_def2 obj_constant obj_constant_list
+%type <node> constant_def type_constant type_constant_list definitions
+%type <node> definitions_id Time bit_element bit_element_list set_def
+%type <node> tag_type tag type_assig_right_tag generalstring_def
+%type <node> type_assig_right_tag_default enumerated_def
+%type <str>  pos_num neg_num pos_neg_num pos_neg_identifier pos_neg_list
+%type <str>  num_identifier
+%type <constant> class explicit_implicit
+
+%%
+
+
+definitions:   definitions_id
+               DEFINITIONS explicit_implicit TAGS "::=" BEGIN  /* imports_def */
+               type_constant_list END
+                   {$$=_asn1_add_node(TYPE_DEFINITIONS|$3);
+                    _asn1_set_name($$,_asn1_get_name($1));
+                    _asn1_set_name($1,"");
+                    _asn1_set_right($1,$7);
+                    _asn1_set_down($$,$1);
+
+                   p_tree=$$;
+                   }
+;
+
+pos_num :   NUM       {strcpy($$,$1);}
+          | '+' NUM   {strcpy($$,$2);}
+;
+
+neg_num : '-' NUM     {strcpy($$,"-");
+                       strcat($$,$2);}
+;
+
+pos_neg_num :  pos_num  {strcpy($$,$1);}
+             | neg_num  {strcpy($$,$1);}
+;
+
+num_identifier :  NUM            {strcpy($$,$1);}
+                | IDENTIFIER     {strcpy($$,$1);}
+;
+
+pos_neg_identifier :  pos_neg_num    {strcpy($$,$1);}
+                    | IDENTIFIER     {strcpy($$,$1);}
+;
+
+constant: '(' pos_neg_num ')'         {$$=_asn1_add_node(TYPE_CONSTANT);
+                                       _asn1_set_value($$,$2,strlen($2)+1);}
+        | IDENTIFIER'('pos_neg_num')' {$$=_asn1_add_node(TYPE_CONSTANT);
+                                      _asn1_set_name($$,$1);
+                                       _asn1_set_value($$,$3,strlen($3)+1);}
+;
+
+constant_list:  constant                   {$$=$1;}
+              | constant_list ',' constant {$$=$1;
+                                            _asn1_set_right(_asn1_get_last_right($1),$3);}
+;
+
+obj_constant:  num_identifier     {$$=_asn1_add_node(TYPE_CONSTANT);
+                                   _asn1_set_value($$,$1,strlen($1)+1);}
+             | IDENTIFIER'('NUM')' {$$=_asn1_add_node(TYPE_CONSTANT);
+                                   _asn1_set_name($$,$1);
+                                    _asn1_set_value($$,$3,strlen($3)+1);}
+;
+
+obj_constant_list:  obj_constant                   {$$=$1;}
+                  | obj_constant_list obj_constant {$$=$1;
+                                                    _asn1_set_right(_asn1_get_last_right($1),$2);}
+;
+
+class :  UNIVERSAL    {$$=CONST_UNIVERSAL;}
+       | PRIVATE      {$$=CONST_PRIVATE;}
+       | APPLICATION  {$$=CONST_APPLICATION;}
+;
+
+tag_type :  '[' NUM ']'    {$$=_asn1_add_node(TYPE_TAG);
+                            _asn1_set_value($$,$2,strlen($2)+1);}
+          | '[' class NUM ']'  {$$=_asn1_add_node(TYPE_TAG | $2);
+                                _asn1_set_value($$,$3,strlen($3)+1);}
+;
+
+tag :  tag_type           {$$=$1;}
+     | tag_type EXPLICIT  {$$=_asn1_mod_type($1,CONST_EXPLICIT);}
+     | tag_type IMPLICIT  {$$=_asn1_mod_type($1,CONST_IMPLICIT);}
+;
+
+default :  DEFAULT pos_neg_identifier {$$=_asn1_add_node(TYPE_DEFAULT);
+                                       _asn1_set_value($$,$2,strlen($2)+1);}
+         | DEFAULT ASN1_TRUE           {$$=_asn1_add_node(TYPE_DEFAULT|CONST_TRUE);}
+         | DEFAULT ASN1_FALSE          {$$=_asn1_add_node(TYPE_DEFAULT|CONST_FALSE);}
+;
+
+
+pos_neg_list:  pos_neg_num
+            |  pos_neg_list '|' pos_neg_num
+;
+
+
+integer_def: INTEGER                    {$$=_asn1_add_node(TYPE_INTEGER);}
+           | INTEGER'{'constant_list'}' {$$=_asn1_add_node(TYPE_INTEGER|CONST_LIST);
+                                        _asn1_set_down($$,$3);}
+           | integer_def'(' pos_neg_list ')' {$$=_asn1_add_node(TYPE_INTEGER);}
+           | integer_def'('num_identifier'.''.'num_identifier')'
+                                        {$$=_asn1_add_node(TYPE_INTEGER|CONST_MIN_MAX);
+                                         _asn1_set_down($$,_asn1_add_node(TYPE_SIZE));
+                                         _asn1_set_value(_asn1_get_down($$),$6,strlen($6)+1);
+                                         _asn1_set_name(_asn1_get_down($$),$3);}
+;
+
+boolean_def: BOOLEAN   {$$=_asn1_add_node(TYPE_BOOLEAN);}
+;
+
+Time:   UTCTime          {$$=_asn1_add_node(TYPE_TIME|CONST_UTC);}
+      | GeneralizedTime  {$$=_asn1_add_node(TYPE_TIME|CONST_GENERALIZED);}
+;
+
+size_def2: SIZE'('num_identifier')'  {$$=_asn1_add_node(TYPE_SIZE|CONST_1_PARAM);
+                                     _asn1_set_value($$,$3,strlen($3)+1);}
+        | SIZE'('num_identifier'.''.'num_identifier')'
+                                     {$$=_asn1_add_node(TYPE_SIZE|CONST_MIN_MAX);
+                                     _asn1_set_value($$,$3,strlen($3)+1);
+                                      _asn1_set_name($$,$6);}
+;
+
+size_def:   size_def2          {$$=$1;}
+          | '(' size_def2 ')'  {$$=$2;}
+;
+
+generalstring_def: GeneralString {$$=_asn1_add_node(TYPE_GENERALSTRING);}
+                | GeneralString size_def {$$=_asn1_add_node(TYPE_GENERALSTRING|CONST_SIZE);
+                                         _asn1_set_down($$,$2);}
+;
+
+octet_string_def : OCTET STRING           {$$=_asn1_add_node(TYPE_OCTET_STRING);}
+                 | OCTET STRING size_def  {$$=_asn1_add_node(TYPE_OCTET_STRING|CONST_SIZE);
+                                           _asn1_set_down($$,$3);}
+;
+
+bit_element :  IDENTIFIER'('NUM')' {$$=_asn1_add_node(TYPE_CONSTANT);
+                                  _asn1_set_name($$,$1);
+                                    _asn1_set_value($$,$3,strlen($3)+1);}
+;
+
+bit_element_list :  bit_element   {$$=$1;}
+                  | bit_element_list ',' bit_element  {$$=$1;
+                                                       _asn1_set_right(_asn1_get_last_right($1),$3);}
+;
+
+bit_string_def : BIT STRING    {$$=_asn1_add_node(TYPE_BIT_STRING);}
+               | BIT STRING size_def {$$=_asn1_add_node(TYPE_BIT_STRING|CONST_SIZE);}
+               | BIT STRING'{'bit_element_list'}'
+                               {$$=_asn1_add_node(TYPE_BIT_STRING|CONST_LIST);
+                                _asn1_set_down($$,$4);}
+;
+
+enumerated_def : ENUMERATED'{'bit_element_list'}'
+                               {$$=_asn1_add_node(TYPE_ENUMERATED|CONST_LIST);
+                                _asn1_set_down($$,$3);}
+;
+
+
+object_def :  OBJECT STR_IDENTIFIER {$$=_asn1_add_node(TYPE_OBJECT_ID);}
+;
+
+type_assig_right: IDENTIFIER          {$$=_asn1_add_node(TYPE_IDENTIFIER);
+                                       _asn1_set_value($$,$1,strlen($1)+1);}
+                | IDENTIFIER size_def {$$=_asn1_add_node(TYPE_IDENTIFIER|CONST_SIZE);
+                                       _asn1_set_value($$,$1,strlen($1)+1);
+                                       _asn1_set_down($$,$2);}
+                | integer_def         {$$=$1;}
+                | enumerated_def      {$$=$1;}
+                | boolean_def         {$$=$1;}
+                | Time
+                | octet_string_def    {$$=$1;}
+                | bit_string_def      {$$=$1;}
+                | generalstring_def   {$$=$1;}
+                | sequence_def        {$$=$1;}
+                | object_def          {$$=$1;}
+                | choise_def          {$$=$1;}
+                | any_def             {$$=$1;}
+                | set_def             {$$=$1;}
+                | TOKEN_NULL          {$$=_asn1_add_node(TYPE_NULL);}
+;
+
+type_assig_right_tag :   type_assig_right     {$$=$1;}
+                       | tag type_assig_right {$$=_asn1_mod_type($2,CONST_TAG);
+                                               _asn1_set_right($1,_asn1_get_down($$));
+                                               _asn1_set_down($$,$1);}
+;
+
+type_assig_right_tag_default : type_assig_right_tag   {$$=$1;}
+                      | type_assig_right_tag default  {$$=_asn1_mod_type($1,CONST_DEFAULT);
+                                                       _asn1_set_right($2,_asn1_get_down($$));
+                                                      _asn1_set_down($$,$2);}
+                      | type_assig_right_tag OPTIONAL {$$=_asn1_mod_type($1,CONST_OPTION);}
+;
+
+type_assig : IDENTIFIER type_assig_right_tag_default  {$$=_asn1_set_name($2,$1);}
+;
+
+type_assig_list : type_assig                   {$$=$1;}
+                | type_assig_list','type_assig {$$=$1;
+                                                _asn1_set_right(_asn1_get_last_right($1),$3);}
+;
+
+sequence_def : SEQUENCE'{'type_assig_list'}' {$$=_asn1_add_node(TYPE_SEQUENCE);
+                                              _asn1_set_down($$,$3);}
+   | SEQUENCE OF type_assig_right            {$$=_asn1_add_node(TYPE_SEQUENCE_OF);
+                                              _asn1_set_down($$,$3);}
+   | SEQUENCE size_def OF type_assig_right {$$=_asn1_add_node(TYPE_SEQUENCE_OF|CONST_SIZE);
+                                            _asn1_set_right($2,$4);
+                                            _asn1_set_down($$,$2);}
+;
+
+set_def :  SET'{'type_assig_list'}' {$$=_asn1_add_node(TYPE_SET);
+                                     _asn1_set_down($$,$3);}
+   | SET OF type_assig_right        {$$=_asn1_add_node(TYPE_SET_OF);
+                                     _asn1_set_down($$,$3);}
+   | SET size_def OF type_assig_right {$$=_asn1_add_node(TYPE_SET_OF|CONST_SIZE);
+                                       _asn1_set_right($2,$4);
+                                       _asn1_set_down($$,$2);}
+;
+
+choise_def :   CHOICE'{'type_assig_list'}'  {$$=_asn1_add_node(TYPE_CHOICE);
+                                             _asn1_set_down($$,$3);}
+;
+
+any_def :  ANY                         {$$=_asn1_add_node(TYPE_ANY);}
+         | ANY DEFINED BY IDENTIFIER   {$$=_asn1_add_node(TYPE_ANY|CONST_DEFINED_BY);
+                                        _asn1_set_down($$,_asn1_add_node(TYPE_CONSTANT));
+                                       _asn1_set_name(_asn1_get_down($$),$4);}
+;
+
+type_def : IDENTIFIER "::=" type_assig_right_tag  {$$=_asn1_set_name($3,$1);}
+;
+
+constant_def :  IDENTIFIER OBJECT STR_IDENTIFIER "::=" '{'obj_constant_list'}'
+                        {$$=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN);
+                         _asn1_set_name($$,$1);
+                         _asn1_set_down($$,$6);}
+              | IDENTIFIER IDENTIFIER "::=" '{' obj_constant_list '}'
+                        {$$=_asn1_add_node(TYPE_OBJECT_ID|CONST_ASSIGN|CONST_1_PARAM);
+                         _asn1_set_name($$,$1);
+                         _asn1_set_value($$,$2,strlen($2)+1);
+                         _asn1_set_down($$,$5);}
+              | IDENTIFIER INTEGER "::=" pos_neg_num
+                        {$$=_asn1_add_node(TYPE_INTEGER|CONST_ASSIGN);
+                         _asn1_set_name($$,$1);
+                         _asn1_set_value($$,$4,strlen($4)+1);}
+;
+
+type_constant:   type_def     {$$=$1;}
+               | constant_def {$$=$1;}
+;
+
+type_constant_list :   type_constant    {$$=$1;}
+                     | type_constant_list type_constant  {$$=$1;
+                                                          _asn1_set_right(_asn1_get_last_right($1),$2);}
+;
+
+definitions_id  :  IDENTIFIER  '{' obj_constant_list '}' {$$=_asn1_add_node(TYPE_OBJECT_ID);
+                                                          _asn1_set_down($$,$3);
+                                                          _asn1_set_name($$,$1);}
+                 | IDENTIFIER  '{' '}'                   {$$=_asn1_add_node(TYPE_OBJECT_ID);
+                                                          _asn1_set_name($$,$1);}
+;
+
+/*
+identifier_list  :  IDENTIFIER  {$$=_asn1_add_node(TYPE_IDENTIFIER);
+                                 _asn1_set_name($$,$1);}
+                  | identifier_list IDENTIFIER
+                                {$$=$1;
+                                 _asn1_set_right(_asn1_get_last_right($$),_asn1_add_node(TYPE_IDENTIFIER));
+                                 _asn1_set_name(_asn1_get_last_right($$),$2);}
+;
+
+
+imports_def :    empty   {$$=NULL;}
+              | IMPORTS identifier_list FROM IDENTIFIER obj_constant_list
+                        {$$=_asn1_add_node(TYPE_IMPORTS);
+                         _asn1_set_down($$,_asn1_add_node(TYPE_OBJECT_ID));
+                         _asn1_set_name(_asn1_get_down($$),$4);
+                         _asn1_set_down(_asn1_get_down($$),$5);
+                         _asn1_set_right($$,$2);}
+;
+*/
+
+explicit_implicit :  EXPLICIT  {$$=CONST_EXPLICIT;}
+                   | IMPLICIT  {$$=CONST_IMPLICIT;}
+;
+
+
+%%
+
+
+
+static const char *key_word[] = {
+  "::=","OPTIONAL","INTEGER","SIZE","OCTET","STRING"
+  ,"SEQUENCE","BIT","UNIVERSAL","PRIVATE","OPTIONAL"
+  ,"DEFAULT","CHOICE","OF","OBJECT","IDENTIFIER"
+  ,"BOOLEAN","TRUE","FALSE","APPLICATION","ANY","DEFINED"
+  ,"SET","BY","EXPLICIT","IMPLICIT","DEFINITIONS","TAGS"
+  ,"BEGIN","END","UTCTime","GeneralizedTime"
+  ,"GeneralString","FROM","IMPORTS","NULL","ENUMERATED"};
+static const int key_word_token[] = {
+  ASSIG,OPTIONAL,INTEGER,SIZE,OCTET,STRING
+  ,SEQUENCE,BIT,UNIVERSAL,PRIVATE,OPTIONAL
+  ,DEFAULT,CHOICE,OF,OBJECT,STR_IDENTIFIER
+  ,BOOLEAN,ASN1_TRUE,ASN1_FALSE,APPLICATION,ANY,DEFINED
+  ,SET,BY,EXPLICIT,IMPLICIT,DEFINITIONS,TAGS
+  ,BEGIN,END,UTCTime,GeneralizedTime
+  ,GeneralString,FROM,IMPORTS,TOKEN_NULL,ENUMERATED};
+
+/*************************************************************/
+/*  Function: _asn1_yylex                                    */
+/*  Description: looks for tokens in file_asn1 pointer file. */
+/*  Return: int                                              */
+/*    Token identifier or ASCII code or 0(zero: End Of File) */
+/*************************************************************/
+static int
+_asn1_yylex()
+{
+  int c,counter=0,k,lastc;
+  char string[ASN1_MAX_NAME_SIZE+1]; /* will contain the next token */
+  size_t i;
+
+  while(1)
+    {
+    while((c=fgetc(file_asn1))==' ' || c=='\t' || c=='\n')
+      if(c=='\n') lineNumber++;
+
+    if(c==EOF){
+      strcpy(lastToken,"End Of File");
+      return 0;
+    }
+
+    if(c=='(' || c==')' || c=='[' || c==']' ||
+       c=='{' || c=='}' || c==',' || c=='.' ||
+       c=='+' || c=='|'){
+      lastToken[0]=c;lastToken[1]=0;
+      return c;
+    }
+    if(c=='-'){  /* Maybe the first '-' of a comment */
+      if((c=fgetc(file_asn1))!='-'){
+       ungetc(c,file_asn1);
+       lastToken[0]='-';lastToken[1]=0;
+       return '-';
+      }
+      else{ /* Comments */
+       lastc=0;
+       counter=0;
+       /* A comment finishes at the next double hypen or the end of line */
+       while((c=fgetc(file_asn1))!=EOF && c!='\n' &&
+             (lastc!='-' || (lastc=='-' && c!='-')))
+         lastc=c;
+       if(c==EOF){
+         strcpy(lastToken,"End Of File");
+         return 0;
+       }
+       else{
+         if(c=='\n') lineNumber++;
+         continue; /* next char, please! (repeat the search) */
+       }
+      }
+    }
+    string[counter++]=c;
+    /* Till the end of the token */
+    while(!((c=fgetc(file_asn1))==EOF || c==' '|| c=='\t' || c=='\n' ||
+            c=='(' || c==')' || c=='[' || c==']' ||
+            c=='{' || c=='}' || c==',' || c=='.'))
+      {
+       if(counter>=ASN1_MAX_NAME_SIZE){
+         result_parse=ASN1_NAME_TOO_LONG;
+         return 0;
+       }
+       string[counter++]=c;
+      }
+    ungetc(c,file_asn1);
+    string[counter]=0;
+    strcpy(lastToken,string);
+
+    /* Is STRING a number? */
+    for(k=0;k<counter;k++)
+      if(!isdigit(string[k])) break;
+    if(k>=counter)
+      {
+      strcpy(yylval.str,string);
+      return NUM; /* return the number */
+      }
+
+    /* Is STRING a keyword? */
+    for(i=0;i<(sizeof(key_word)/sizeof(char*));i++)
+      if(!strcmp(string,key_word[i])) return key_word_token[i];
+
+    /* STRING is an IDENTIFIER */
+    strcpy(yylval.str,string);
+    return IDENTIFIER;
+    }
+}
+
+/*************************************************************/
+/*  Function: _asn1_create_errorDescription                  */
+/*  Description: creates a string with the description of the*/
+/*    error.                                                 */
+/*  Parameters:                                              */
+/*    error : error to describe.                             */
+/*    errorDescription: string that will contain the         */
+/*                      description.                         */
+/*************************************************************/
+static void
+_asn1_create_errorDescription(int error,char *errorDescription)
+{
+  switch(error){
+  case ASN1_SUCCESS: case ASN1_FILE_NOT_FOUND:
+    if (errorDescription!=NULL) errorDescription[0]=0;
+    break;
+  case ASN1_SYNTAX_ERROR:
+    if (errorDescription!=NULL) {
+       strcpy(errorDescription,fileName);
+       strcat(errorDescription,":");
+       _asn1_ltostr(lineNumber,errorDescription+strlen(fileName)+1);
+       strcat(errorDescription,": parse error near '");
+       strcat(errorDescription,lastToken);
+       strcat(errorDescription,"'");
+    }
+    break;
+  case ASN1_NAME_TOO_LONG:
+    if (errorDescription!=NULL) {
+       strcpy(errorDescription,fileName);
+       strcat(errorDescription,":");
+       _asn1_ltostr(lineNumber,errorDescription+strlen(fileName)+1);
+       strcat(errorDescription,": name too long (more than ");
+       _asn1_ltostr(ASN1_MAX_NAME_SIZE,errorDescription+strlen(errorDescription));
+       strcat(errorDescription," characters)");
+    }
+    break;
+  case ASN1_IDENTIFIER_NOT_FOUND:
+    if (errorDescription!=NULL) {
+       strcpy(errorDescription,fileName);
+       strcat(errorDescription,":");
+       strcat(errorDescription,": identifier '");
+       strcat(errorDescription,_asn1_identifierMissing);
+       strcat(errorDescription,"' not found");
+    }
+    break;
+  default:
+    if (errorDescription!=NULL) errorDescription[0]=0;
+    break;
+  }
+
+}
+
+/**
+ * asn1_parser2tree:
+ * @file_name: specify the path and the name of file that contains
+ *   ASN.1 declarations.
+ * @definitions: return the pointer to the structure created from
+ *   "file_name" ASN.1 declarations.
+ * @errorDescription: 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_name file.
+ *
+ * Returns:
+ *
+ * %ASN1_SUCCESS: The file has a correct syntax and every identifier
+ * is known.
+ *
+ * %ASN1_ELEMENT_NOT_EMPTY: @definitions not %ASN1_TYPE_EMPTY.
+ *
+ * %ASN1_FILE_NOT_FOUND: An error occured while opening @file_name.
+ *
+ * %ASN1_SYNTAX_ERROR: The syntax is not correct.
+ *
+ * %ASN1_IDENTIFIER_NOT_FOUND: In the file there is an identifier that
+ * is not defined.
+ *
+ * %ASN1_NAME_TOO_LONG: In the file there is an identifier whith more
+ * than %ASN1_MAX_NAME_SIZE characters.
+ **/
+asn1_retCode
+asn1_parser2tree(const char *file_name, ASN1_TYPE *definitions,
+                char *errorDescription){
+
+  p_tree=ASN1_TYPE_EMPTY;
+
+  if(*definitions != ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_EMPTY;
+
+  *definitions=ASN1_TYPE_EMPTY;
+
+  fileName = file_name;
+
+  /* open the file to parse */
+  file_asn1=fopen(file_name,"r");
+
+  if(file_asn1==NULL){
+    result_parse=ASN1_FILE_NOT_FOUND;
+  }
+  else{
+    result_parse=ASN1_SUCCESS;
+
+    lineNumber=1;
+    yyparse();
+
+    fclose(file_asn1);
+
+    if(result_parse==ASN1_SUCCESS){ /* syntax OK */
+      /* set IMPLICIT or EXPLICIT property */
+      _asn1_set_default_tag(p_tree);
+      /* set CONST_SET and CONST_NOT_USED */
+      _asn1_type_set_config(p_tree);
+      /* check the identifier definitions */
+      result_parse=_asn1_check_identifier(p_tree);
+      if(result_parse==ASN1_SUCCESS){ /* all identifier defined */
+       /* Delete the list and keep the ASN1 structure */
+       _asn1_delete_list();
+       /* Convert into DER coding the value assign to INTEGER constants */
+       _asn1_change_integer_value(p_tree);
+       /* Expand the IDs of OBJECT IDENTIFIER constants */
+       _asn1_expand_object_id(p_tree);
+
+       *definitions=p_tree;
+      }
+      else /* some identifiers not defined */
+       /* Delete the list and the ASN1 structure */
+       _asn1_delete_list_and_nodes();
+    }
+    else  /* syntax error */
+      /* Delete the list and the ASN1 structure */
+      _asn1_delete_list_and_nodes();
+  }
+
+  if (errorDescription!=NULL)
+       _asn1_create_errorDescription(result_parse,errorDescription);
+
+  return result_parse;
+}
+
+/**
+ * asn1_parser2array:
+ * @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.
+ * @errorDescription : 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: The file has a correct syntax and every identifier
+ *   is known.
+ *
+ * %ASN1_FILE_NOT_FOUND: An error occured while opening @inputFileName.
+ *
+ * %ASN1_SYNTAX_ERROR: The syntax is not correct.
+ *
+ * %ASN1_IDENTIFIER_NOT_FOUND: In the file there is an identifier that
+ *   is not defined.
+ *
+ * %ASN1_NAME_TOO_LONG: In the file there is an identifier whith more
+ *   than %ASN1_MAX_NAME_SIZE characters.
+ **/
+int asn1_parser2array(const char *inputFileName,const char *outputFileName,
+                     const char *vectorName,char *errorDescription){
+  char *file_out_name=NULL;
+  char *vector_name=NULL;
+  const char *char_p,*slash_p,*dot_p;
+
+  p_tree=NULL;
+
+  fileName = inputFileName;
+
+  /* open the file to parse */
+  file_asn1=fopen(inputFileName,"r");
+
+  if(file_asn1==NULL)
+    result_parse=ASN1_FILE_NOT_FOUND;
+  else{
+    result_parse=ASN1_SUCCESS;
+
+    lineNumber=1;
+    yyparse();
+
+    fclose(file_asn1);
+
+    if(result_parse==ASN1_SUCCESS){ /* syntax OK */
+      /* set IMPLICIT or EXPLICIT property */
+      _asn1_set_default_tag(p_tree);
+      /* set CONST_SET and CONST_NOT_USED */
+      _asn1_type_set_config(p_tree);
+      /* check the identifier definitions */
+      result_parse=_asn1_check_identifier(p_tree);
+
+      if(result_parse==ASN1_SUCCESS){ /* all identifier defined */
+
+       /* searching the last '/' and '.' in inputFileName */
+       char_p=inputFileName;
+       slash_p=inputFileName;
+       while((char_p=strchr(char_p,'/'))){
+         char_p++;
+         slash_p=char_p;
+       }
+
+       char_p=slash_p;
+       dot_p=inputFileName+strlen(inputFileName);
+
+       while((char_p=strchr(char_p,'.'))){
+         dot_p=char_p;
+         char_p++;
+       }
+
+       if(outputFileName == NULL){
+         /* file_out_name = inputFileName + _asn1_tab.c */
+         file_out_name=(char *)malloc(dot_p-inputFileName+1+
+                                      strlen("_asn1_tab.c"));
+         memcpy(file_out_name,inputFileName,dot_p-inputFileName);
+         file_out_name[dot_p-inputFileName]=0;
+         strcat(file_out_name,"_asn1_tab.c");
+       }
+       else{
+         /* file_out_name = inputFileName */
+         file_out_name=(char *)malloc(strlen(outputFileName)+1);
+         strcpy(file_out_name,outputFileName);
+       }
+
+       if(vectorName == NULL){
+         /* vector_name = file name + _asn1_tab */
+         vector_name=(char *)malloc(dot_p-slash_p+1+
+                                    strlen("_asn1_tab"));
+         memcpy(vector_name,slash_p,dot_p-slash_p);
+         vector_name[dot_p-slash_p]=0;
+         strcat(vector_name,"_asn1_tab");
+       }
+       else{
+         /* vector_name = vectorName */
+         vector_name=(char *)malloc(strlen(vectorName)+1);
+         strcpy(vector_name,vectorName);
+       }
+
+       /* Save structure in a file */
+       _asn1_create_static_structure(p_tree,
+                                     file_out_name,vector_name);
+
+       free(file_out_name);
+       free(vector_name);
+      } /* result == OK */
+    }   /* result == OK */
+
+    /* Delete the list and the ASN1 structure */
+    _asn1_delete_list_and_nodes();
+  } /* inputFile exist */
+
+  if (errorDescription!=NULL)
+       _asn1_create_errorDescription(result_parse,errorDescription);
+
+  return result_parse;
+}
+
+/*************************************************************/
+/*  Function: _asn1_yyerror                                  */
+/*  Description: function called when there are syntax errors*/
+/*  Parameters:                                              */
+/*    char *s : error description                            */
+/*  Return: int                                              */
+/*                                                           */
+/*************************************************************/
+static int _asn1_yyerror (const char *s)
+{
+  /* Sends the error description to the std_out */
+
+#if 0
+  printf("_asn1_yyerror:%s:%ld: %s (Last Token:'%s')\n",fileName,
+        lineNumber,s,lastToken);
+#endif
+
+  if(result_parse!=ASN1_NAME_TOO_LONG)
+    result_parse=ASN1_SYNTAX_ERROR;
+
+  return 0;
+}
diff --git a/lib/Makefile.am b/lib/Makefile.am
new file mode 100644 (file)
index 0000000..b767b69
--- /dev/null
@@ -0,0 +1,60 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+SUBDIRS = gllib
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAG_VISIBILITY)
+AM_CPPFLAGS = -I$(builddir)/gllib -DASN1_BUILDING
+
+include_HEADERS = libtasn1.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libtasn1.pc
+
+lib_LTLIBRARIES = libtasn1.la
+
+libtasn1_la_SOURCES =  \
+       ASN1.y          \
+       coding.c        \
+       decoding.c      \
+       element.c       \
+       element.h       \
+       errors.c        \
+       gstr.c          \
+       gstr.h          \
+       int.h           \
+       libtasn1.h      \
+       libtasn1.map    \
+       parser_aux.c    \
+       parser_aux.h    \
+       structure.c     \
+       structure.h     \
+       version.c
+
+libtasn1_la_LIBADD = gllib/libgnu.la
+
+libtasn1_la_LDFLAGS = \
+       -no-undefined \
+       -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
+
+if HAVE_LD_VERSION_SCRIPT
+libtasn1_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libtasn1.map
+else
+libtasn1_la_LDFLAGS += -export-symbols-regex '^(asn1|libtasn1_).*'
+endif
diff --git a/lib/Makefile.in b/lib/Makefile.in
new file mode 100644 (file)
index 0000000..3f83cc8
--- /dev/null
@@ -0,0 +1,1151 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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@
+@HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libtasn1.map
+@HAVE_LD_VERSION_SCRIPT_FALSE@am__append_2 = -export-symbols-regex '^(asn1|libtasn1_).*'
+subdir = lib
+DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(srcdir)/libtasn1.pc.in ASN1.c
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES = libtasn1.pc
+CONFIG_CLEAN_VPATH_FILES =
+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__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \
+       "$(DESTDIR)$(includedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libtasn1_la_DEPENDENCIES = gllib/libgnu.la
+am_libtasn1_la_OBJECTS = ASN1.lo coding.lo decoding.lo element.lo \
+       errors.lo gstr.lo parser_aux.lo structure.lo version.lo
+libtasn1_la_OBJECTS = $(am_libtasn1_la_OBJECTS)
+libtasn1_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libtasn1_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
+LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
+YLWRAP = $(top_srcdir)/build-aux/ylwrap
+SOURCES = $(libtasn1_la_SOURCES)
+DIST_SOURCES = $(libtasn1_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+DATA = $(pkgconfig_DATA)
+HEADERS = $(include_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+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@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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 = gllib
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(CFLAG_VISIBILITY)
+AM_CPPFLAGS = -I$(builddir)/gllib -DASN1_BUILDING
+include_HEADERS = libtasn1.h
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libtasn1.pc
+lib_LTLIBRARIES = libtasn1.la
+libtasn1_la_SOURCES = \
+       ASN1.y          \
+       coding.c        \
+       decoding.c      \
+       element.c       \
+       element.h       \
+       errors.c        \
+       gstr.c          \
+       gstr.h          \
+       int.h           \
+       libtasn1.h      \
+       libtasn1.map    \
+       parser_aux.c    \
+       parser_aux.h    \
+       structure.c     \
+       structure.h     \
+       version.c
+
+libtasn1_la_LIBADD = gllib/libgnu.la
+libtasn1_la_LDFLAGS = -no-undefined -version-info \
+       $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) $(am__append_1) \
+       $(am__append_2)
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj .y
+$(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 lib/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu lib/Makefile
+.PRECIOUS: 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):
+libtasn1.pc: $(top_builddir)/config.status $(srcdir)/libtasn1.pc.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+       @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+       list2=; for p in $$list; do \
+         if test -f $$p; then \
+           list2="$$list2 $$p"; \
+         else :; fi; \
+       done; \
+       test -z "$$list2" || { \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+       }
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+       for p in $$list; do \
+         $(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libtasn1.la: $(libtasn1_la_OBJECTS) $(libtasn1_la_DEPENDENCIES) 
+       $(libtasn1_la_LINK) -rpath $(libdir) $(libtasn1_la_OBJECTS) $(libtasn1_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ASN1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coding.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decoding.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_aux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/structure.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+.y.c:
+       $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
+       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       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)$(pkgconfigdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+       done
+
+uninstall-pkgconfigDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
+install-includeHEADERS: $(include_HEADERS)
+       @$(NORMAL_INSTALL)
+       test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
+       @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+       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_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+         $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+       done
+
+uninstall-includeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       test -n "$$files" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(includedir)" && rm -f $$files
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       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; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+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 \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           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
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; 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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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."
+       -rm -f ASN1.c
+clean: clean-recursive
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-includeHEADERS install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+       uninstall-pkgconfigDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
+       install-am install-strip tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic \
+       clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \
+       distclean distclean-compile 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-includeHEADERS install-info install-info-am \
+       install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+       install-pkgconfigDATA install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs installdirs-am \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+       uninstall-includeHEADERS uninstall-libLTLIBRARIES \
+       uninstall-pkgconfigDATA
+
+
+# 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/lib/coding.c b/lib/coding.c
new file mode 100644 (file)
index 0000000..31b5ebb
--- /dev/null
@@ -0,0 +1,1227 @@
+/*
+ * Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 Free Software
+ * Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+
+/*****************************************************/
+/* File: coding.c                                    */
+/* Description: Functions to create a DER coding of  */
+/*   an ASN1 type.                                   */
+/*****************************************************/
+
+#include <int.h>
+#include "parser_aux.h"
+#include <gstr.h>
+#include "element.h"
+#include <structure.h>
+
+#define MAX_TAG_LEN 16
+
+/******************************************************/
+/* Function : _asn1_error_description_value_not_found */
+/* Description: creates the ErrorDescription string   */
+/* for the ASN1_VALUE_NOT_FOUND error.                */
+/* Parameters:                                        */
+/*   node: node of the tree where the value is NULL.  */
+/*   ErrorDescription: string returned.               */
+/* Return:                                            */
+/******************************************************/
+static void
+_asn1_error_description_value_not_found (ASN1_TYPE node,
+                                        char *ErrorDescription)
+{
+
+  if (ErrorDescription == NULL)
+    return;
+
+  Estrcpy (ErrorDescription, ":: value of element '");
+  _asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription),
+                          ASN1_MAX_ERROR_DESCRIPTION_SIZE - 40);
+  Estrcat (ErrorDescription, "' not found");
+
+}
+
+/**
+ * asn1_length_der:
+ * @len: value to convert.
+ * @ans: string returned.
+ * @ans_len: number of meaningful bytes of ANS (ans[0]..ans[ans_len-1]).
+ *
+ * Creates the DER coding for the LEN parameter (only the length).
+ * The @ans buffer is pre-allocated and must have room for the output.
+ **/
+void
+asn1_length_der (unsigned long int len, unsigned char *ans, int *ans_len)
+{
+  int k;
+  unsigned char temp[SIZEOF_UNSIGNED_LONG_INT];
+
+  if (len < 128)
+    {
+      /* short form */
+      if (ans != NULL)
+       ans[0] = (unsigned char) len;
+      *ans_len = 1;
+    }
+  else
+    {
+      /* Long form */
+      k = 0;
+      while (len)
+       {
+         temp[k++] = len & 0xFF;
+         len = len >> 8;
+       }
+      *ans_len = k + 1;
+      if (ans != NULL)
+       {
+         ans[0] = ((unsigned char) k & 0x7F) + 128;
+         while (k--)
+           ans[*ans_len - 1 - k] = temp[k];
+       }
+    }
+}
+
+/******************************************************/
+/* Function : _asn1_tag_der                           */
+/* Description: creates the DER coding for the CLASS  */
+/* and TAG parameters.                                */
+/* Parameters:                                        */
+/*   class: value to convert.                         */
+/*   tag_value: value to convert.                     */
+/*   ans: string returned.                            */
+/*   ans_len: number of meaningful bytes of ANS       */
+/*            (ans[0]..ans[ans_len-1]).               */
+/* Return:                                            */
+/******************************************************/
+static void
+_asn1_tag_der (unsigned char class, unsigned int tag_value,
+              unsigned char *ans, int *ans_len)
+{
+  int k;
+  unsigned char temp[SIZEOF_UNSIGNED_INT];
+
+  if (tag_value < 31)
+    {
+      /* short form */
+      ans[0] = (class & 0xE0) + ((unsigned char) (tag_value & 0x1F));
+      *ans_len = 1;
+    }
+  else
+    {
+      /* Long form */
+      ans[0] = (class & 0xE0) + 31;
+      k = 0;
+      while (tag_value)
+       {
+         temp[k++] = tag_value & 0x7F;
+         tag_value = tag_value >> 7;
+       }
+      *ans_len = k + 1;
+      while (k--)
+       ans[*ans_len - 1 - k] = temp[k] + 128;
+      ans[*ans_len - 1] -= 128;
+    }
+}
+
+/**
+ * asn1_octet_der:
+ * @str: OCTET string.
+ * @str_len: STR length (str[0]..str[str_len-1]).
+ * @der: string returned.
+ * @der_len: number of meaningful bytes of DER (der[0]..der[ans_len-1]).
+ *
+ * Creates the DER coding for an OCTET type (length included).
+ **/
+void
+asn1_octet_der (const unsigned char *str, int str_len,
+               unsigned char *der, int *der_len)
+{
+  int len_len;
+
+  if (der == NULL || str_len < 0)
+    return;
+  asn1_length_der (str_len, der, &len_len);
+  memcpy (der + len_len, str, str_len);
+  *der_len = str_len + len_len;
+}
+
+/******************************************************/
+/* Function : _asn1_time_der                          */
+/* Description: creates the DER coding for a TIME     */
+/* type (length included).                            */
+/* Parameters:                                        */
+/*   str: TIME null-terminated string.                */
+/*   der: string returned.                            */
+/*   der_len: number of meaningful bytes of DER       */
+/*            (der[0]..der[ans_len-1]). Initially it  */
+/*            if must store the lenght of DER.        */
+/* Return:                                            */
+/*   ASN1_MEM_ERROR when DER isn't big enough         */
+/*   ASN1_SUCCESS otherwise                           */
+/******************************************************/
+static asn1_retCode
+_asn1_time_der (unsigned char *str, unsigned char *der, int *der_len)
+{
+  int len_len;
+  int max_len;
+
+  max_len = *der_len;
+
+  asn1_length_der (strlen (str), (max_len > 0) ? der : NULL, &len_len);
+
+  if ((len_len + (int) strlen (str)) <= max_len)
+    memcpy (der + len_len, str, strlen (str));
+  *der_len = len_len + strlen (str);
+
+  if ((*der_len) > max_len)
+    return ASN1_MEM_ERROR;
+
+  return ASN1_SUCCESS;
+}
+
+
+/*
+void
+_asn1_get_utctime_der(unsigned char *der,int *der_len,unsigned char *str)
+{
+  int len_len,str_len;
+  char temp[20];
+
+  if(str==NULL) return;
+  str_len=asn1_get_length_der(der,*der_len,&len_len);
+  if (str_len<0) return;
+  memcpy(temp,der+len_len,str_len);
+  *der_len=str_len+len_len;
+  switch(str_len){
+  case 11:
+    temp[10]=0;
+    strcat(temp,"00+0000");
+    break;
+  case 13:
+    temp[12]=0;
+    strcat(temp,"+0000");
+    break;
+  case 15:
+    temp[15]=0;
+    memmove(temp+12,temp+10,6);
+    temp[10]=temp[11]='0';
+    break;
+  case 17:
+    temp[17]=0;
+    break;
+  default:
+    return;
+  }
+  strcpy(str,temp);
+}
+*/
+
+/******************************************************/
+/* Function : _asn1_objectid_der                      */
+/* Description: creates the DER coding for an         */
+/* OBJECT IDENTIFIER  type (length included).         */
+/* Parameters:                                        */
+/*   str: OBJECT IDENTIFIER null-terminated string.   */
+/*   der: string returned.                            */
+/*   der_len: number of meaningful bytes of DER       */
+/*            (der[0]..der[ans_len-1]). Initially it  */
+/*            must store the length of DER.           */
+/* Return:                                            */
+/*   ASN1_MEM_ERROR when DER isn't big enough         */
+/*   ASN1_SUCCESS otherwise                           */
+/******************************************************/
+static asn1_retCode
+_asn1_objectid_der (unsigned char *str, unsigned char *der, int *der_len)
+{
+  int len_len, counter, k, first, max_len;
+  char *temp, *n_end, *n_start;
+  unsigned char bit7;
+  unsigned long val, val1 = 0;
+
+  max_len = *der_len;
+
+  temp = (char *) _asn1_malloc (strlen (str) + 2);
+  if (temp == NULL)
+    return ASN1_MEM_ALLOC_ERROR;
+
+  strcpy (temp, str);
+  strcat (temp, ".");
+
+  counter = 0;
+  n_start = temp;
+  while ((n_end = strchr (n_start, '.')))
+    {
+      *n_end = 0;
+      val = strtoul (n_start, NULL, 10);
+      counter++;
+
+      if (counter == 1)
+       val1 = val;
+      else if (counter == 2)
+       {
+         if (max_len > 0)
+           der[0] = 40 * val1 + val;
+         *der_len = 1;
+       }
+      else
+       {
+         first = 0;
+         for (k = 4; k >= 0; k--)
+           {
+             bit7 = (val >> (k * 7)) & 0x7F;
+             if (bit7 || first || !k)
+               {
+                 if (k)
+                   bit7 |= 0x80;
+                 if (max_len > (*der_len))
+                   der[*der_len] = bit7;
+                 (*der_len)++;
+                 first = 1;
+               }
+           }
+
+       }
+      n_start = n_end + 1;
+    }
+
+  asn1_length_der (*der_len, NULL, &len_len);
+  if (max_len >= (*der_len + len_len))
+    {
+      memmove (der + len_len, der, *der_len);
+      asn1_length_der (*der_len, der, &len_len);
+    }
+  *der_len += len_len;
+
+  _asn1_free (temp);
+
+  if (max_len < (*der_len))
+    return ASN1_MEM_ERROR;
+
+  return ASN1_SUCCESS;
+}
+
+
+const char bit_mask[] = { 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80 };
+
+/**
+ * asn1_bit_der:
+ * @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 the DER coding for a BIT STRING type (length and pad
+ * included).
+ **/
+void
+asn1_bit_der (const unsigned char *str, int bit_len,
+             unsigned char *der, int *der_len)
+{
+  int len_len, len_byte, len_pad;
+
+  if (der == NULL)
+    return;
+  len_byte = bit_len >> 3;
+  len_pad = 8 - (bit_len & 7);
+  if (len_pad == 8)
+    len_pad = 0;
+  else
+    len_byte++;
+  asn1_length_der (len_byte + 1, der, &len_len);
+  der[len_len] = len_pad;
+  memcpy (der + len_len + 1, str, len_byte);
+  der[len_len + len_byte] &= bit_mask[len_pad];
+  *der_len = len_byte + len_len + 1;
+}
+
+
+/******************************************************/
+/* Function : _asn1_complete_explicit_tag             */
+/* Description: add the length coding to the EXPLICIT */
+/* tags.                                              */
+/* Parameters:                                        */
+/*   node: pointer to the tree element.               */
+/*   der: string with the DER coding of the whole tree*/
+/*   counter: number of meaningful bytes of DER       */
+/*            (der[0]..der[*counter-1]).              */
+/*   max_len: size of der vector                      */
+/* Return:                                            */
+/*   ASN1_MEM_ERROR if der vector isn't big enough,   */
+/*   otherwise ASN1_SUCCESS.                          */
+/******************************************************/
+static asn1_retCode
+_asn1_complete_explicit_tag (ASN1_TYPE node, unsigned char *der,
+                            int *counter, int *max_len)
+{
+  ASN1_TYPE p;
+  int is_tag_implicit, len2, len3;
+  unsigned char temp[SIZEOF_UNSIGNED_INT];
+
+  is_tag_implicit = 0;
+
+  if (node->type & CONST_TAG)
+    {
+      p = node->down;
+      /* When there are nested tags we must complete them reverse to
+         the order they were created. This is because completing a tag
+         modifies all data within it, including the incomplete tags
+         which store buffer positions -- simon@josefsson.org 2002-09-06
+       */
+      while (p->right)
+       p = p->right;
+      while (p && p != node->down->left)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if (p->type & CONST_EXPLICIT)
+               {
+                 len2 = strtol (p->name, NULL, 10);
+                 _asn1_set_name (p, NULL);
+                 asn1_length_der (*counter - len2, temp, &len3);
+                 if (len3 <= (*max_len))
+                   {
+                     memmove (der + len2 + len3, der + len2,
+                              *counter - len2);
+                     memcpy (der + len2, temp, len3);
+                   }
+                 *max_len -= len3;
+                 *counter += len3;
+                 is_tag_implicit = 0;
+               }
+             else
+               {               /* CONST_IMPLICIT */
+                 if (!is_tag_implicit)
+                   {
+                     is_tag_implicit = 1;
+                   }
+               }
+           }
+         p = p->left;
+       }
+    }
+
+  if (*max_len < 0)
+    return ASN1_MEM_ERROR;
+
+  return ASN1_SUCCESS;
+}
+
+
+/******************************************************/
+/* Function : _asn1_insert_tag_der                    */
+/* Description: creates the DER coding of tags of one */
+/* NODE.                                              */
+/* Parameters:                                        */
+/*   node: pointer to the tree element.               */
+/*   der: string returned                             */
+/*   counter: number of meaningful bytes of DER       */
+/*            (counter[0]..der[*counter-1]).          */
+/*   max_len: size of der vector                      */
+/* Return:                                            */
+/*   ASN1_GENERIC_ERROR if the type is unknown,       */
+/*   ASN1_MEM_ERROR if der vector isn't big enough,   */
+/*   otherwise ASN1_SUCCESS.                          */
+/******************************************************/
+static asn1_retCode
+_asn1_insert_tag_der (ASN1_TYPE node, unsigned char *der, int *counter,
+                     int *max_len)
+{
+  ASN1_TYPE p;
+  int tag_len, is_tag_implicit;
+  unsigned char class, class_implicit = 0, temp[SIZEOF_UNSIGNED_INT * 3 + 1];
+  unsigned long tag_implicit = 0;
+  char tag_der[MAX_TAG_LEN];
+
+  is_tag_implicit = 0;
+
+  if (node->type & CONST_TAG)
+    {
+      p = node->down;
+      while (p)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if (p->type & CONST_APPLICATION)
+               class = ASN1_CLASS_APPLICATION;
+             else if (p->type & CONST_UNIVERSAL)
+               class = ASN1_CLASS_UNIVERSAL;
+             else if (p->type & CONST_PRIVATE)
+               class = ASN1_CLASS_PRIVATE;
+             else
+               class = ASN1_CLASS_CONTEXT_SPECIFIC;
+
+             if (p->type & CONST_EXPLICIT)
+               {
+                 if (is_tag_implicit)
+                   _asn1_tag_der (class_implicit, tag_implicit, tag_der,
+                                  &tag_len);
+                 else
+                   _asn1_tag_der (class | ASN1_CLASS_STRUCTURED,
+                                  strtoul (p->value, NULL, 10), tag_der,
+                                  &tag_len);
+
+                 *max_len -= tag_len;
+                 if (*max_len >= 0)
+                   memcpy (der + *counter, tag_der, tag_len);
+                 *counter += tag_len;
+
+                 _asn1_ltostr (*counter, temp);
+                 _asn1_set_name (p, temp);
+
+                 is_tag_implicit = 0;
+               }
+             else
+               {               /* CONST_IMPLICIT */
+                 if (!is_tag_implicit)
+                   {
+                     if ((type_field (node->type) == TYPE_SEQUENCE) ||
+                         (type_field (node->type) == TYPE_SEQUENCE_OF) ||
+                         (type_field (node->type) == TYPE_SET) ||
+                         (type_field (node->type) == TYPE_SET_OF))
+                       class |= ASN1_CLASS_STRUCTURED;
+                     class_implicit = class;
+                     tag_implicit = strtoul (p->value, NULL, 10);
+                     is_tag_implicit = 1;
+                   }
+               }
+           }
+         p = p->right;
+       }
+    }
+
+  if (is_tag_implicit)
+    {
+      _asn1_tag_der (class_implicit, tag_implicit, tag_der, &tag_len);
+    }
+  else
+    {
+      switch (type_field (node->type))
+       {
+       case TYPE_NULL:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_NULL, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_BOOLEAN:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_BOOLEAN, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_INTEGER:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_INTEGER, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_ENUMERATED:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_ENUMERATED, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_OBJECT_ID:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_OBJECT_ID, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_TIME:
+         if (node->type & CONST_UTC)
+           {
+             _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_UTCTime, tag_der,
+                            &tag_len);
+           }
+         else
+           _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALIZEDTime,
+                          tag_der, &tag_len);
+         break;
+       case TYPE_OCTET_STRING:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_OCTET_STRING, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_GENERALSTRING:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_GENERALSTRING,
+                        tag_der, &tag_len);
+         break;
+       case TYPE_BIT_STRING:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL, ASN1_TAG_BIT_STRING, tag_der,
+                        &tag_len);
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SEQUENCE_OF:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED,
+                        ASN1_TAG_SEQUENCE, tag_der, &tag_len);
+         break;
+       case TYPE_SET:
+       case TYPE_SET_OF:
+         _asn1_tag_der (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED,
+                        ASN1_TAG_SET, tag_der, &tag_len);
+         break;
+       case TYPE_TAG:
+         tag_len = 0;
+         break;
+       case TYPE_CHOICE:
+         tag_len = 0;
+         break;
+       case TYPE_ANY:
+         tag_len = 0;
+         break;
+       default:
+         return ASN1_GENERIC_ERROR;
+       }
+    }
+
+  *max_len -= tag_len;
+  if (*max_len >= 0)
+    memcpy (der + *counter, tag_der, tag_len);
+  *counter += tag_len;
+
+  if (*max_len < 0)
+    return ASN1_MEM_ERROR;
+
+  return ASN1_SUCCESS;
+}
+
+/******************************************************/
+/* Function : _asn1_ordering_set                      */
+/* Description: puts the elements of a SET type in    */
+/* the correct order according to DER rules.          */
+/* Parameters:                                        */
+/*   der: string with the DER coding.                 */
+/*   node: pointer to the SET element.                */
+/* Return:                                            */
+/******************************************************/
+static void
+_asn1_ordering_set (unsigned char *der, int der_len, ASN1_TYPE node)
+{
+  struct vet
+  {
+    int end;
+    unsigned long value;
+    struct vet *next, *prev;
+  };
+
+  int counter, len, len2;
+  struct vet *first, *last, *p_vet, *p2_vet;
+  ASN1_TYPE p;
+  unsigned char class, *temp;
+  unsigned long tag;
+
+  counter = 0;
+
+  if (type_field (node->type) != TYPE_SET)
+    return;
+
+  p = node->down;
+  while ((type_field (p->type) == TYPE_TAG)
+        || (type_field (p->type) == TYPE_SIZE))
+    p = p->right;
+
+  if ((p == NULL) || (p->right == NULL))
+    return;
+
+  first = last = NULL;
+  while (p)
+    {
+      p_vet = (struct vet *) _asn1_malloc (sizeof (struct vet));
+      if (p_vet == NULL)
+       return;
+
+      p_vet->next = NULL;
+      p_vet->prev = last;
+      if (first == NULL)
+       first = p_vet;
+      else
+       last->next = p_vet;
+      last = p_vet;
+
+      /* tag value calculation */
+      if (asn1_get_tag_der
+         (der + counter, der_len - counter, &class, &len2,
+          &tag) != ASN1_SUCCESS)
+       return;
+      p_vet->value = (class << 24) | tag;
+      counter += len2;
+
+      /* extraction and length */
+      len2 = asn1_get_length_der (der + counter, der_len - counter, &len);
+      if (len2 < 0)
+       return;
+      counter += len + len2;
+
+      p_vet->end = counter;
+      p = p->right;
+    }
+
+  p_vet = first;
+
+  while (p_vet)
+    {
+      p2_vet = p_vet->next;
+      counter = 0;
+      while (p2_vet)
+       {
+         if (p_vet->value > p2_vet->value)
+           {
+             /* change position */
+             temp = (unsigned char *) _asn1_malloc (p_vet->end - counter);
+             if (temp == NULL)
+               return;
+
+             memcpy (temp, der + counter, p_vet->end - counter);
+             memcpy (der + counter, der + p_vet->end,
+                     p2_vet->end - p_vet->end);
+             memcpy (der + counter + p2_vet->end - p_vet->end, temp,
+                     p_vet->end - counter);
+             _asn1_free (temp);
+
+             tag = p_vet->value;
+             p_vet->value = p2_vet->value;
+             p2_vet->value = tag;
+
+             p_vet->end = counter + (p2_vet->end - p_vet->end);
+           }
+         counter = p_vet->end;
+
+         p2_vet = p2_vet->next;
+         p_vet = p_vet->next;
+       }
+
+      if (p_vet != first)
+       p_vet->prev->next = NULL;
+      else
+       first = NULL;
+      _asn1_free (p_vet);
+      p_vet = first;
+    }
+}
+
+/******************************************************/
+/* Function : _asn1_ordering_set_of                   */
+/* Description: puts the elements of a SET OF type in */
+/* the correct order according to DER rules.          */
+/* Parameters:                                        */
+/*   der: string with the DER coding.                 */
+/*   node: pointer to the SET OF element.             */
+/* Return:                                            */
+/******************************************************/
+static void
+_asn1_ordering_set_of (unsigned char *der, int der_len, ASN1_TYPE node)
+{
+  struct vet
+  {
+    int end;
+    struct vet *next, *prev;
+  };
+
+  int counter, len, len2, change;
+  struct vet *first, *last, *p_vet, *p2_vet;
+  ASN1_TYPE p;
+  unsigned char *temp, class;
+  unsigned long k, max;
+
+  counter = 0;
+
+  if (type_field (node->type) != TYPE_SET_OF)
+    return;
+
+  p = node->down;
+  while ((type_field (p->type) == TYPE_TAG)
+        || (type_field (p->type) == TYPE_SIZE))
+    p = p->right;
+  p = p->right;
+
+  if ((p == NULL) || (p->right == NULL))
+    return;
+
+  first = last = NULL;
+  while (p)
+    {
+      p_vet = (struct vet *) _asn1_malloc (sizeof (struct vet));
+      if (p_vet == NULL)
+       return;
+
+      p_vet->next = NULL;
+      p_vet->prev = last;
+      if (first == NULL)
+       first = p_vet;
+      else
+       last->next = p_vet;
+      last = p_vet;
+
+      /* extraction of tag and length */
+      if (der_len - counter > 0)
+       {
+
+         if (asn1_get_tag_der
+             (der + counter, der_len - counter, &class, &len,
+              NULL) != ASN1_SUCCESS)
+           return;
+         counter += len;
+
+         len2 = asn1_get_length_der (der + counter, der_len - counter, &len);
+         if (len2 < 0)
+           return;
+         counter += len + len2;
+       }
+
+      p_vet->end = counter;
+      p = p->right;
+    }
+
+  p_vet = first;
+
+  while (p_vet)
+    {
+      p2_vet = p_vet->next;
+      counter = 0;
+      while (p2_vet)
+       {
+         if ((p_vet->end - counter) > (p2_vet->end - p_vet->end))
+           max = p_vet->end - counter;
+         else
+           max = p2_vet->end - p_vet->end;
+
+         change = -1;
+         for (k = 0; k < max; k++)
+           if (der[counter + k] > der[p_vet->end + k])
+             {
+               change = 1;
+               break;
+             }
+           else if (der[counter + k] < der[p_vet->end + k])
+             {
+               change = 0;
+               break;
+             }
+
+         if ((change == -1)
+             && ((p_vet->end - counter) > (p2_vet->end - p_vet->end)))
+           change = 1;
+
+         if (change == 1)
+           {
+             /* change position */
+             temp = (unsigned char *) _asn1_malloc (p_vet->end - counter);
+             if (temp == NULL)
+               return;
+
+             memcpy (temp, der + counter, (p_vet->end) - counter);
+             memcpy (der + counter, der + (p_vet->end),
+                     (p2_vet->end) - (p_vet->end));
+             memcpy (der + counter + (p2_vet->end) - (p_vet->end), temp,
+                     (p_vet->end) - counter);
+             _asn1_free (temp);
+
+             p_vet->end = counter + (p2_vet->end - p_vet->end);
+           }
+         counter = p_vet->end;
+
+         p2_vet = p2_vet->next;
+         p_vet = p_vet->next;
+       }
+
+      if (p_vet != first)
+       p_vet->prev->next = NULL;
+      else
+       first = NULL;
+      _asn1_free (p_vet);
+      p_vet = first;
+    }
+}
+
+/**
+ * asn1_der_coding:
+ * @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: DER encoding OK.
+ *
+ *   %ASN1_ELEMENT_NOT_FOUND: NAME is not a valid element.
+ *
+ *   %ASN1_VALUE_NOT_FOUND: There is an element without a value.
+ *
+ *   %ASN1_MEM_ERROR: @ider vector isn't big enough. Also in this case
+ *     LEN will contain the length needed.
+ **/
+asn1_retCode
+asn1_der_coding (ASN1_TYPE element, const char *name, void *ider, int *len,
+                char *ErrorDescription)
+{
+  ASN1_TYPE node, p, p2;
+  char temp[SIZEOF_UNSIGNED_LONG_INT * 3 + 1];
+  int counter, counter_old, len2, len3, tlen, move, max_len, max_len_old;
+  asn1_retCode err;
+  unsigned char *der = ider;
+
+  node = asn1_find_node (element, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  /* Node is now a locally allocated variable.
+   * That is because in some point we modify the
+   * structure, and I don't know why! --nmav
+   */
+  node = _asn1_copy_structure3 (node);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  max_len = *len;
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+
+      counter_old = counter;
+      max_len_old = max_len;
+      if (move != UP)
+       {
+         err = _asn1_insert_tag_der (p, der, &counter, &max_len);
+         if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
+           goto error;
+       }
+      switch (type_field (p->type))
+       {
+       case TYPE_NULL:
+         max_len--;
+         if (max_len >= 0)
+           der[counter] = 0;
+         counter++;
+         move = RIGHT;
+         break;
+       case TYPE_BOOLEAN:
+         if ((p->type & CONST_DEFAULT) && (p->value == NULL))
+           {
+             counter = counter_old;
+             max_len = max_len_old;
+           }
+         else
+           {
+             if (p->value == NULL)
+               {
+                 _asn1_error_description_value_not_found (p,
+                                                          ErrorDescription);
+                 err = ASN1_VALUE_NOT_FOUND;
+                 goto error;
+               }
+             max_len -= 2;
+             if (max_len >= 0)
+               {
+                 der[counter++] = 1;
+                 if (p->value[0] == 'F')
+                   der[counter++] = 0;
+                 else
+                   der[counter++] = 0xFF;
+               }
+             else
+               counter += 2;
+           }
+         move = RIGHT;
+         break;
+       case TYPE_INTEGER:
+       case TYPE_ENUMERATED:
+         if ((p->type & CONST_DEFAULT) && (p->value == NULL))
+           {
+             counter = counter_old;
+             max_len = max_len_old;
+           }
+         else
+           {
+             if (p->value == NULL)
+               {
+                 _asn1_error_description_value_not_found (p,
+                                                          ErrorDescription);
+                 err = ASN1_VALUE_NOT_FOUND;
+                 goto error;
+               }
+             len2 = asn1_get_length_der (p->value, p->value_len, &len3);
+             if (len2 < 0)
+               {
+                 err = ASN1_DER_ERROR;
+                 goto error;
+               }
+             max_len -= len2 + len3;
+             if (max_len >= 0)
+               memcpy (der + counter, p->value, len3 + len2);
+             counter += len3 + len2;
+           }
+         move = RIGHT;
+         break;
+       case TYPE_OBJECT_ID:
+         if ((p->type & CONST_DEFAULT) && (p->value == NULL))
+           {
+             counter = counter_old;
+             max_len = max_len_old;
+           }
+         else
+           {
+             if (p->value == NULL)
+               {
+                 _asn1_error_description_value_not_found (p,
+                                                          ErrorDescription);
+                 err = ASN1_VALUE_NOT_FOUND;
+                 goto error;
+               }
+             len2 = max_len;
+             err = _asn1_objectid_der (p->value, der + counter, &len2);
+             if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
+               goto error;
+
+             max_len -= len2;
+             counter += len2;
+           }
+         move = RIGHT;
+         break;
+       case TYPE_TIME:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = max_len;
+         err = _asn1_time_der (p->value, der + counter, &len2);
+         if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
+           goto error;
+
+         max_len -= len2;
+         counter += len2;
+         move = RIGHT;
+         break;
+       case TYPE_OCTET_STRING:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2 + len3;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value, len3 + len2);
+         counter += len3 + len2;
+         move = RIGHT;
+         break;
+       case TYPE_GENERALSTRING:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2 + len3;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value, len3 + len2);
+         counter += len3 + len2;
+         move = RIGHT;
+         break;
+       case TYPE_BIT_STRING:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2 + len3;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value, len3 + len2);
+         counter += len3 + len2;
+         move = RIGHT;
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SET:
+         if (move != UP)
+           {
+             _asn1_ltostr (counter, temp);
+             tlen = strlen (temp);
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             if (p->down == NULL)
+               {
+                 move = UP;
+                 continue;
+               }
+             else
+               {
+                 p2 = p->down;
+                 while (p2 && (type_field (p2->type) == TYPE_TAG))
+                   p2 = p2->right;
+                 if (p2)
+                   {
+                     p = p2;
+                     move = RIGHT;
+                     continue;
+                   }
+                 move = UP;
+                 continue;
+               }
+           }
+         else
+           {                   /* move==UP */
+             len2 = strtol (p->value, NULL, 10);
+             _asn1_set_value (p, NULL, 0);
+             if ((type_field (p->type) == TYPE_SET) && (max_len >= 0))
+               _asn1_ordering_set (der + len2, max_len - len2, p);
+             asn1_length_der (counter - len2, temp, &len3);
+             max_len -= len3;
+             if (max_len >= 0)
+               {
+                 memmove (der + len2 + len3, der + len2, counter - len2);
+                 memcpy (der + len2, temp, len3);
+               }
+             counter += len3;
+             move = RIGHT;
+           }
+         break;
+       case TYPE_SEQUENCE_OF:
+       case TYPE_SET_OF:
+         if (move != UP)
+           {
+             _asn1_ltostr (counter, temp);
+             tlen = strlen (temp);
+
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             p = p->down;
+             while ((type_field (p->type) == TYPE_TAG)
+                    || (type_field (p->type) == TYPE_SIZE))
+               p = p->right;
+             if (p->right)
+               {
+                 p = p->right;
+                 move = RIGHT;
+                 continue;
+               }
+             else
+               p = _asn1_find_up (p);
+             move = UP;
+           }
+         if (move == UP)
+           {
+             len2 = strtol (p->value, NULL, 10);
+             _asn1_set_value (p, NULL, 0);
+             if ((type_field (p->type) == TYPE_SET_OF)
+                 && (max_len - len2 > 0))
+               {
+                 _asn1_ordering_set_of (der + len2, max_len - len2, p);
+               }
+             asn1_length_der (counter - len2, temp, &len3);
+             max_len -= len3;
+             if (max_len >= 0)
+               {
+                 memmove (der + len2 + len3, der + len2, counter - len2);
+                 memcpy (der + len2, temp, len3);
+               }
+             counter += len3;
+             move = RIGHT;
+           }
+         break;
+       case TYPE_ANY:
+         if (p->value == NULL)
+           {
+             _asn1_error_description_value_not_found (p, ErrorDescription);
+             err = ASN1_VALUE_NOT_FOUND;
+             goto error;
+           }
+         len2 = asn1_get_length_der (p->value, p->value_len, &len3);
+         if (len2 < 0)
+           {
+             err = ASN1_DER_ERROR;
+             goto error;
+           }
+         max_len -= len2;
+         if (max_len >= 0)
+           memcpy (der + counter, p->value + len3, len2);
+         counter += len2;
+         move = RIGHT;
+         break;
+       default:
+         move = (move == UP) ? RIGHT : DOWN;
+         break;
+       }
+
+      if ((move != DOWN) && (counter != counter_old))
+       {
+         err = _asn1_complete_explicit_tag (p, der, &counter, &max_len);
+         if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
+           goto error;
+       }
+
+      if (p == node && move != DOWN)
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  *len = counter;
+
+  if (max_len < 0)
+    {
+      err = ASN1_MEM_ERROR;
+      goto error;
+    }
+
+  err = ASN1_SUCCESS;
+
+error:
+  asn1_delete_structure (&node);
+  return err;
+}
diff --git a/lib/decoding.c b/lib/decoding.c
new file mode 100644 (file)
index 0000000..8c8b01f
--- /dev/null
@@ -0,0 +1,2821 @@
+/*
+ * Copyright (C) 2002, 2004, 2006, 2008, 2009, 2010 Free Software
+ * Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+
+/*****************************************************/
+/* File: decoding.c                                  */
+/* Description: Functions to manage DER decoding     */
+/*****************************************************/
+
+#include <int.h>
+#include "parser_aux.h"
+#include <gstr.h>
+#include "structure.h"
+#include "element.h"
+
+static asn1_retCode
+_asn1_get_indefinite_length_string (const unsigned char *der, int *len);
+
+static void
+_asn1_error_description_tag_error (ASN1_TYPE node, char *ErrorDescription)
+{
+
+  Estrcpy (ErrorDescription, ":: tag error near element '");
+  _asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription),
+                          ASN1_MAX_ERROR_DESCRIPTION_SIZE - 40);
+  Estrcat (ErrorDescription, "'");
+
+}
+
+/**
+ * asn1_get_length_der:
+ * @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.
+ **/
+signed long
+asn1_get_length_der (const unsigned char *der, int der_len, int *len)
+{
+  unsigned long ans;
+  int k, punt;
+
+  *len = 0;
+  if (der_len <= 0)
+    return 0;
+
+  if (!(der[0] & 128))
+    {
+      /* short form */
+      *len = 1;
+      return der[0];
+    }
+  else
+    {
+      /* Long form */
+      k = der[0] & 0x7F;
+      punt = 1;
+      if (k)
+       {                       /* definite length method */
+         ans = 0;
+         while (punt <= k && punt < der_len)
+           {
+             unsigned long last = ans;
+
+             ans = ans * 256 + der[punt++];
+             if (ans < last)
+               /* we wrapped around, no bignum support... */
+               return -2;
+           }
+       }
+      else
+       {                       /* indefinite length method */
+         ans = -1;
+       }
+
+      *len = punt;
+      return ans;
+    }
+}
+
+/**
+ * asn1_get_tag_der:
+ * @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.
+ **/
+int
+asn1_get_tag_der (const unsigned char *der, int der_len,
+                 unsigned char *cls, int *len, unsigned long *tag)
+{
+  int punt, ris;
+
+  if (der == NULL || der_len < 2 || len == NULL)
+    return ASN1_DER_ERROR;
+
+  *cls = der[0] & 0xE0;
+  if ((der[0] & 0x1F) != 0x1F)
+    {
+      /* short form */
+      *len = 1;
+      ris = der[0] & 0x1F;
+    }
+  else
+    {
+      /* Long form */
+      punt = 1;
+      ris = 0;
+      while (punt <= der_len && der[punt] & 128)
+       {
+         int last = ris;
+         ris = ris * 128 + (der[punt++] & 0x7F);
+         if (ris < last)
+           /* wrapper around, and no bignums... */
+           return ASN1_DER_ERROR;
+       }
+      if (punt >= der_len)
+       return ASN1_DER_ERROR;
+      {
+       int last = ris;
+       ris = ris * 128 + (der[punt++] & 0x7F);
+       if (ris < last)
+         /* wrapper around, and no bignums... */
+         return ASN1_DER_ERROR;
+      }
+      *len = punt;
+    }
+  if (tag)
+    *tag = ris;
+  return ASN1_SUCCESS;
+}
+
+/**
+ * asn1_get_length_ber:
+ * @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
+ **/
+signed long
+asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len)
+{
+  int ret;
+  long err;
+
+  ret = asn1_get_length_der (ber, ber_len, len);
+  if (ret == -1)
+    {                          /* indefinite length method */
+      ret = ber_len;
+      err = _asn1_get_indefinite_length_string (ber + 1, &ret);
+      if (err != ASN1_SUCCESS)
+       return -3;
+    }
+
+  return ret;
+}
+
+/**
+ * asn1_get_octet_der:
+ * @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.
+ **/
+int
+asn1_get_octet_der (const unsigned char *der, int der_len,
+                   int *ret_len, unsigned char *str, int str_size,
+                   int *str_len)
+{
+  int len_len;
+
+  if (der_len <= 0)
+    return ASN1_GENERIC_ERROR;
+
+  /* if(str==NULL) return ASN1_SUCCESS; */
+  *str_len = asn1_get_length_der (der, der_len, &len_len);
+
+  if (*str_len < 0)
+    return ASN1_DER_ERROR;
+
+  *ret_len = *str_len + len_len;
+  if (str_size >= *str_len)
+    memcpy (str, der + len_len, *str_len);
+  else
+    {
+      return ASN1_MEM_ERROR;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+/* Returns ASN1_SUCCESS on success or an error code on error.
+ */
+static int
+_asn1_get_time_der (const unsigned char *der, int der_len, int *ret_len,
+                   char *str, int str_size)
+{
+  int len_len, str_len;
+
+  if (der_len <= 0 || str == NULL)
+    return ASN1_DER_ERROR;
+  str_len = asn1_get_length_der (der, der_len, &len_len);
+  if (str_len < 0 || str_size < str_len)
+    return ASN1_DER_ERROR;
+  memcpy (str, der + len_len, str_len);
+  str[str_len] = 0;
+  *ret_len = str_len + len_len;
+
+  return ASN1_SUCCESS;
+}
+
+static int
+_asn1_get_objectid_der (const unsigned char *der, int der_len, int *ret_len,
+                       char *str, int str_size)
+{
+  int len_len, len, k;
+  int leading;
+  char temp[20];
+  unsigned long val, val1, prev_val;
+
+  *ret_len = 0;
+  if (str && str_size > 0)
+    str[0] = 0;                        /* no oid */
+
+  if (str == NULL || der_len <= 0)
+    return ASN1_GENERIC_ERROR;
+  len = asn1_get_length_der (der, der_len, &len_len);
+
+  if (len < 0 || len > der_len || len_len > der_len)
+    return ASN1_DER_ERROR;
+
+  val1 = der[len_len] / 40;
+  val = der[len_len] - val1 * 40;
+
+  _asn1_str_cpy (str, str_size, _asn1_ltostr (val1, temp));
+  _asn1_str_cat (str, str_size, ".");
+  _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp));
+
+  prev_val = 0;
+  val = 0;
+  leading = 1;
+  for (k = 1; k < len; k++)
+    {
+      /* X.690 mandates that the leading byte must never be 0x80
+       */
+      if (leading != 0 && der[len_len + k] == 0x80)
+       return ASN1_DER_ERROR;
+      leading = 0;
+
+      /* check for wrap around */
+      val = val << 7;
+      val |= der[len_len + k] & 0x7F;
+
+      if (val < prev_val)
+       return ASN1_DER_ERROR;
+
+      prev_val = val;
+
+      if (!(der[len_len + k] & 0x80))
+       {
+         _asn1_str_cat (str, str_size, ".");
+         _asn1_str_cat (str, str_size, _asn1_ltostr (val, temp));
+         val = 0;
+         prev_val = 0;
+         leading = 1;
+       }
+    }
+  *ret_len = len + len_len;
+
+  return ASN1_SUCCESS;
+}
+
+/**
+ * asn1_get_bit_der:
+ * @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: Return %ASN1_SUCCESS on success, or an error.
+ **/
+int
+asn1_get_bit_der (const unsigned char *der, int der_len,
+                 int *ret_len, unsigned char *str, int str_size,
+                 int *bit_len)
+{
+  int len_len, len_byte;
+
+  if (der_len <= 0)
+    return ASN1_GENERIC_ERROR;
+  len_byte = asn1_get_length_der (der, der_len, &len_len) - 1;
+  if (len_byte < 0)
+    return ASN1_DER_ERROR;
+
+  *ret_len = len_byte + len_len + 1;
+  *bit_len = len_byte * 8 - der[len_len];
+
+  if (str_size >= len_byte)
+    memcpy (str, der + len_len + 1, len_byte);
+  else
+    {
+      return ASN1_MEM_ERROR;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+static int
+_asn1_extract_tag_der (ASN1_TYPE node, const unsigned char *der, int der_len,
+                      int *ret_len)
+{
+  ASN1_TYPE p;
+  int counter, len2, len3, is_tag_implicit;
+  unsigned long tag, tag_implicit = 0;
+  unsigned char class, class2, class_implicit = 0;
+
+  if (der_len <= 0)
+    return ASN1_GENERIC_ERROR;
+
+  counter = is_tag_implicit = 0;
+
+  if (node->type & CONST_TAG)
+    {
+      p = node->down;
+      while (p)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if (p->type & CONST_APPLICATION)
+               class2 = ASN1_CLASS_APPLICATION;
+             else if (p->type & CONST_UNIVERSAL)
+               class2 = ASN1_CLASS_UNIVERSAL;
+             else if (p->type & CONST_PRIVATE)
+               class2 = ASN1_CLASS_PRIVATE;
+             else
+               class2 = ASN1_CLASS_CONTEXT_SPECIFIC;
+
+             if (p->type & CONST_EXPLICIT)
+               {
+                 if (asn1_get_tag_der
+                     (der + counter, der_len - counter, &class, &len2,
+                      &tag) != ASN1_SUCCESS)
+                   return ASN1_DER_ERROR;
+
+                 if (counter + len2 > der_len)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+
+                 len3 =
+                   asn1_get_length_ber (der + counter, der_len - counter,
+                                        &len2);
+                 if (len3 < 0)
+                   return ASN1_DER_ERROR;
+
+                 counter += len2;
+                 if (counter > der_len)
+                   return ASN1_DER_ERROR;
+
+                 if (!is_tag_implicit)
+                   {
+                     if ((class != (class2 | ASN1_CLASS_STRUCTURED)) ||
+                         (tag != strtoul ((char *) p->value, NULL, 10)))
+                       return ASN1_TAG_ERROR;
+                   }
+                 else
+                   {           /* ASN1_TAG_IMPLICIT */
+                     if ((class != class_implicit) || (tag != tag_implicit))
+                       return ASN1_TAG_ERROR;
+                   }
+                 is_tag_implicit = 0;
+               }
+             else
+               {               /* ASN1_TAG_IMPLICIT */
+                 if (!is_tag_implicit)
+                   {
+                     if ((type_field (node->type) == TYPE_SEQUENCE) ||
+                         (type_field (node->type) == TYPE_SEQUENCE_OF) ||
+                         (type_field (node->type) == TYPE_SET) ||
+                         (type_field (node->type) == TYPE_SET_OF))
+                       class2 |= ASN1_CLASS_STRUCTURED;
+                     class_implicit = class2;
+                     tag_implicit = strtoul ((char *) p->value, NULL, 10);
+                     is_tag_implicit = 1;
+                   }
+               }
+           }
+         p = p->right;
+       }
+    }
+
+  if (is_tag_implicit)
+    {
+      if (asn1_get_tag_der
+         (der + counter, der_len - counter, &class, &len2,
+          &tag) != ASN1_SUCCESS)
+       return ASN1_DER_ERROR;
+      if (counter + len2 > der_len)
+       return ASN1_DER_ERROR;
+
+      if ((class != class_implicit) || (tag != tag_implicit))
+       {
+         if (type_field (node->type) == TYPE_OCTET_STRING)
+           {
+             class_implicit |= ASN1_CLASS_STRUCTURED;
+             if ((class != class_implicit) || (tag != tag_implicit))
+               return ASN1_TAG_ERROR;
+           }
+         else
+           return ASN1_TAG_ERROR;
+       }
+    }
+  else
+    {
+      if (type_field (node->type) == TYPE_TAG)
+       {
+         counter = 0;
+         *ret_len = counter;
+         return ASN1_SUCCESS;
+       }
+
+      if (asn1_get_tag_der
+         (der + counter, der_len - counter, &class, &len2,
+          &tag) != ASN1_SUCCESS)
+       return ASN1_DER_ERROR;
+
+      if (counter + len2 > der_len)
+       return ASN1_DER_ERROR;
+
+      switch (type_field (node->type))
+       {
+       case TYPE_NULL:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_NULL))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_BOOLEAN:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_BOOLEAN))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_INTEGER:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_INTEGER))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_ENUMERATED:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_ENUMERATED))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_OBJECT_ID:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_OBJECT_ID))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_TIME:
+         if (node->type & CONST_UTC)
+           {
+             if ((class != ASN1_CLASS_UNIVERSAL)
+                 || (tag != ASN1_TAG_UTCTime))
+               return ASN1_DER_ERROR;
+           }
+         else
+           {
+             if ((class != ASN1_CLASS_UNIVERSAL)
+                 || (tag != ASN1_TAG_GENERALIZEDTime))
+               return ASN1_DER_ERROR;
+           }
+         break;
+       case TYPE_OCTET_STRING:
+         if (((class != ASN1_CLASS_UNIVERSAL)
+              && (class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED)))
+             || (tag != ASN1_TAG_OCTET_STRING))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_GENERALSTRING:
+         if ((class != ASN1_CLASS_UNIVERSAL)
+             || (tag != ASN1_TAG_GENERALSTRING))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_BIT_STRING:
+         if ((class != ASN1_CLASS_UNIVERSAL) || (tag != ASN1_TAG_BIT_STRING))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SEQUENCE_OF:
+         if ((class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))
+             || (tag != ASN1_TAG_SEQUENCE))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_SET:
+       case TYPE_SET_OF:
+         if ((class != (ASN1_CLASS_UNIVERSAL | ASN1_CLASS_STRUCTURED))
+             || (tag != ASN1_TAG_SET))
+           return ASN1_DER_ERROR;
+         break;
+       case TYPE_ANY:
+         counter -= len2;
+         break;
+       default:
+         return ASN1_DER_ERROR;
+         break;
+       }
+    }
+
+  counter += len2;
+  *ret_len = counter;
+  return ASN1_SUCCESS;
+}
+
+static int
+_asn1_delete_not_used (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if (p->type & CONST_NOT_USED)
+       {
+         p2 = NULL;
+         if (p != node)
+           {
+             p2 = _asn1_find_left (p);
+             if (!p2)
+               p2 = _asn1_find_up (p);
+           }
+         asn1_delete_structure (&p);
+         p = p2;
+       }
+
+      if (!p)
+       break;                  /* reach node */
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else
+       {
+         if (p == node)
+           p = NULL;
+         else if (p->right)
+           p = p->right;
+         else
+           {
+             while (1)
+               {
+                 p = _asn1_find_up (p);
+                 if (p == node)
+                   {
+                     p = NULL;
+                     break;
+                   }
+                 if (p->right)
+                   {
+                     p = p->right;
+                     break;
+                   }
+               }
+           }
+       }
+    }
+  return ASN1_SUCCESS;
+}
+
+static asn1_retCode
+_asn1_extract_der_octet (ASN1_TYPE node, const unsigned char *der,
+                        int der_len)
+{
+  int len2, len3;
+  int counter2, counter_end;
+
+  len2 = asn1_get_length_der (der, der_len, &len3);
+  if (len2 < -1)
+    return ASN1_DER_ERROR;
+
+  counter2 = len3 + 1;
+
+  if (len2 == -1)
+    counter_end = der_len - 2;
+  else
+    counter_end = der_len;
+
+  while (counter2 < counter_end)
+    {
+      len2 = asn1_get_length_der (der + counter2, der_len - counter2, &len3);
+
+      if (len2 < -1)
+       return ASN1_DER_ERROR;
+
+      if (len2 > 0)
+       {
+         _asn1_append_value (node, der + counter2 + len3, len2);
+       }
+      else
+       {                       /* indefinite */
+
+         len2 =
+           _asn1_extract_der_octet (node, der + counter2 + len3,
+                                    der_len - counter2 - len3);
+         if (len2 < 0)
+           return len2;
+       }
+
+      counter2 += len2 + len3 + 1;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+static asn1_retCode
+_asn1_get_octet_string (const unsigned char *der, ASN1_TYPE node, int *len)
+{
+  int len2, len3, counter, tot_len, indefinite;
+
+  counter = 0;
+
+  if (*(der - 1) & ASN1_CLASS_STRUCTURED)
+    {
+      tot_len = 0;
+      indefinite = asn1_get_length_der (der, *len, &len3);
+      if (indefinite < -1)
+       return ASN1_DER_ERROR;
+
+      counter += len3;
+      if (indefinite >= 0)
+       indefinite += len3;
+
+      while (1)
+       {
+         if (counter > (*len))
+           return ASN1_DER_ERROR;
+
+         if (indefinite == -1)
+           {
+             if ((der[counter] == 0) && (der[counter + 1] == 0))
+               {
+                 counter += 2;
+                 break;
+               }
+           }
+         else if (counter >= indefinite)
+           break;
+
+         if (der[counter] != ASN1_TAG_OCTET_STRING)
+           return ASN1_DER_ERROR;
+
+         counter++;
+
+         len2 = asn1_get_length_der (der + counter, *len - counter, &len3);
+         if (len2 <= 0)
+           return ASN1_DER_ERROR;
+
+         counter += len3 + len2;
+         tot_len += len2;
+       }
+
+      /* copy */
+      if (node)
+       {
+         unsigned char temp[DER_LEN];
+         int ret;
+
+         len2 = sizeof (temp);
+
+         asn1_length_der (tot_len, temp, &len2);
+         _asn1_set_value (node, temp, len2);
+
+         tot_len += len2;
+
+         ret = _asn1_extract_der_octet (node, der, *len);
+         if (ret != ASN1_SUCCESS)
+           return ret;
+
+       }
+    }
+  else
+    {                          /* NOT STRUCTURED */
+      len2 = asn1_get_length_der (der, *len, &len3);
+      if (len2 < 0)
+       return ASN1_DER_ERROR;
+      if (len3 + len2 > *len)
+       return ASN1_DER_ERROR;
+      if (node)
+       _asn1_set_value (node, der, len3 + len2);
+      counter = len3 + len2;
+    }
+
+  *len = counter;
+  return ASN1_SUCCESS;
+
+}
+
+static asn1_retCode
+_asn1_get_indefinite_length_string (const unsigned char *der, int *len)
+{
+  int len2, len3, counter, indefinite;
+  unsigned long tag;
+  unsigned char class;
+
+  counter = indefinite = 0;
+
+  while (1)
+    {
+      if ((*len) < counter)
+       return ASN1_DER_ERROR;
+
+      if ((der[counter] == 0) && (der[counter + 1] == 0))
+       {
+         counter += 2;
+         indefinite--;
+         if (indefinite <= 0)
+           break;
+         else
+           continue;
+       }
+
+      if (asn1_get_tag_der
+         (der + counter, *len - counter, &class, &len2,
+          &tag) != ASN1_SUCCESS)
+       return ASN1_DER_ERROR;
+      if (counter + len2 > *len)
+       return ASN1_DER_ERROR;
+      counter += len2;
+      len2 = asn1_get_length_der (der + counter, *len - counter, &len3);
+      if (len2 < -1)
+       return ASN1_DER_ERROR;
+      if (len2 == -1)
+       {
+         indefinite++;
+         counter += 1;
+       }
+      else
+       {
+         counter += len2 + len3;
+       }
+    }
+
+  *len = counter;
+  return ASN1_SUCCESS;
+
+}
+
+/**
+ * asn1_der_decoding:
+ * @element: pointer to an ASN1 structure.
+ * @ider: vector that contains the DER encoding.
+ * @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().  If an error occurs during the decoding
+ * procedure, the *@ELEMENT is deleted and set equal to
+ * %ASN1_TYPE_EMPTY.
+ *
+ * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND
+ *   if @ELEMENT is %ASN1_TYPE_EMPTY, and %ASN1_TAG_ERROR or
+ *   %ASN1_DER_ERROR if the der encoding doesn't match the structure
+ *   name (*@ELEMENT deleted).
+ **/
+asn1_retCode
+asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len,
+                  char *errorDescription)
+{
+  ASN1_TYPE node, p, p2, p3;
+  char temp[128];
+  int counter, len2, len3, len4, move, ris, tlen;
+  unsigned char class;
+  unsigned long tag;
+  int indefinite, result;
+  const unsigned char *der = ider;
+
+  node = *element;
+
+  if (node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (node->type & CONST_OPTION)
+    {
+      asn1_delete_structure (element);
+      return ASN1_GENERIC_ERROR;
+    }
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+      ris = ASN1_SUCCESS;
+      if (move != UP)
+       {
+         if (p->type & CONST_SET)
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (len2 == -1)
+               {
+                 if (!der[counter] && !der[counter + 1])
+                   {
+                     p = p2;
+                     move = UP;
+                     counter += 2;
+                     continue;
+                   }
+               }
+             else if (counter == len2)
+               {
+                 p = p2;
+                 move = UP;
+                 continue;
+               }
+             else if (counter > len2)
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+             p2 = p2->down;
+             while (p2)
+               {
+                 if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED))
+                   {
+                     if (type_field (p2->type) != TYPE_CHOICE)
+                       ris =
+                         _asn1_extract_tag_der (p2, der + counter,
+                                                len - counter, &len2);
+                     else
+                       {
+                         p3 = p2->down;
+                         while (p3)
+                           {
+                             ris =
+                               _asn1_extract_tag_der (p3, der + counter,
+                                                      len - counter, &len2);
+                             if (ris == ASN1_SUCCESS)
+                               break;
+                             p3 = p3->right;
+                           }
+                       }
+                     if (ris == ASN1_SUCCESS)
+                       {
+                         p2->type &= ~CONST_NOT_USED;
+                         p = p2;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+           }
+
+         if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter == len2)
+               {
+                 if (p->right)
+                   {
+                     p2 = p->right;
+                     move = RIGHT;
+                   }
+                 else
+                   move = UP;
+
+                 if (p->type & CONST_OPTION)
+                   asn1_delete_structure (&p);
+
+                 p = p2;
+                 continue;
+               }
+           }
+
+         if (type_field (p->type) == TYPE_CHOICE)
+           {
+             while (p->down)
+               {
+                 if (counter < len)
+                   ris =
+                     _asn1_extract_tag_der (p->down, der + counter,
+                                            len - counter, &len2);
+                 else
+                   ris = ASN1_DER_ERROR;
+                 if (ris == ASN1_SUCCESS)
+                   {
+                     while (p->down->right)
+                       {
+                         p2 = p->down->right;
+                         asn1_delete_structure (&p2);
+                       }
+                     break;
+                   }
+                 else if (ris == ASN1_ERROR_TYPE_ANY)
+                   {
+                     asn1_delete_structure (element);
+                     return ASN1_ERROR_TYPE_ANY;
+                   }
+                 else
+                   {
+                     p2 = p->down;
+                     asn1_delete_structure (&p2);
+                   }
+               }
+
+             if (p->down == NULL)
+               {
+                 if (!(p->type & CONST_OPTION))
+                   {
+                     asn1_delete_structure (element);
+                     return ASN1_DER_ERROR;
+                   }
+               }
+             else
+               p = p->down;
+           }
+
+         if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if ((len2 != -1) && (counter > len2))
+               ris = ASN1_TAG_ERROR;
+           }
+
+         if (ris == ASN1_SUCCESS)
+           ris =
+             _asn1_extract_tag_der (p, der + counter, len - counter, &len2);
+         if (ris != ASN1_SUCCESS)
+           {
+             if (p->type & CONST_OPTION)
+               {
+                 p->type |= CONST_NOT_USED;
+                 move = RIGHT;
+               }
+             else if (p->type & CONST_DEFAULT)
+               {
+                 _asn1_set_value (p, NULL, 0);
+                 move = RIGHT;
+               }
+             else
+               {
+                 if (errorDescription != NULL)
+                   _asn1_error_description_tag_error (p, errorDescription);
+
+                 asn1_delete_structure (element);
+                 return ASN1_TAG_ERROR;
+               }
+           }
+         else
+           counter += len2;
+       }
+
+      if (ris == ASN1_SUCCESS)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_NULL:
+             if (der[counter])
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_BOOLEAN:
+             if (der[counter++] != 1)
+               {
+                 asn1_delete_structure (element);
+                 return ASN1_DER_ERROR;
+               }
+             if (der[counter++] == 0)
+               _asn1_set_value (p, "F", 1);
+             else
+               _asn1_set_value (p, "T", 1);
+             move = RIGHT;
+             break;
+           case TYPE_INTEGER:
+           case TYPE_ENUMERATED:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (len2 + len3 > len - counter)
+               return ASN1_DER_ERROR;
+             _asn1_set_value (p, der + counter, len3 + len2);
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_OBJECT_ID:
+             result =
+               _asn1_get_objectid_der (der + counter, len - counter, &len2,
+                                       temp, sizeof (temp));
+             if (result != ASN1_SUCCESS)
+               {
+                 asn1_delete_structure (element);
+                 return result;
+               }
+
+             tlen = strlen (temp);
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_TIME:
+             result =
+               _asn1_get_time_der (der + counter, len - counter, &len2, temp,
+                                   sizeof (temp) - 1);
+             if (result != ASN1_SUCCESS)
+               {
+                 asn1_delete_structure (element);
+                 return result;
+               }
+             tlen = strlen (temp);
+             if (tlen > 0)
+               _asn1_set_value (p, temp, tlen + 1);
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_OCTET_STRING:
+             len3 = len - counter;
+             ris = _asn1_get_octet_string (der + counter, p, &len3);
+             if (ris != ASN1_SUCCESS)
+               return ris;
+             counter += len3;
+             move = RIGHT;
+             break;
+           case TYPE_GENERALSTRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (len3 + len2 > len - counter)
+               return ASN1_DER_ERROR;
+             _asn1_set_value (p, der + counter, len3 + len2);
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_BIT_STRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (len3 + len2 > len - counter)
+               return ASN1_DER_ERROR;
+             _asn1_set_value (p, der + counter, len3 + len2);
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_SEQUENCE:
+           case TYPE_SET:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 _asn1_set_value (p, NULL, 0);
+                 if (len2 == -1)
+                   {           /* indefinite length method */
+                     if (len - counter + 1 > 0)
+                       {
+                         if ((der[counter]) || der[counter + 1])
+                           {
+                             asn1_delete_structure (element);
+                             return ASN1_DER_ERROR;
+                           }
+                       }
+                     else
+                       return ASN1_DER_ERROR;
+                     counter += 2;
+                   }
+                 else
+                   {           /* definite length method */
+                     if (len2 != counter)
+                       {
+                         asn1_delete_structure (element);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+                 move = RIGHT;
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if (len3 > 0)
+                   {
+                     _asn1_ltostr (counter + len3, temp);
+                     tlen = strlen (temp);
+                     if (tlen > 0)
+                       _asn1_set_value (p, temp, tlen + 1);
+                     move = DOWN;
+                   }
+                 else if (len3 == 0)
+                   {
+                     p2 = p->down;
+                     while (p2)
+                       {
+                         if (type_field (p2->type) != TYPE_TAG)
+                           {
+                             p3 = p2->right;
+                             asn1_delete_structure (&p2);
+                             p2 = p3;
+                           }
+                         else
+                           p2 = p2->right;
+                       }
+                     move = RIGHT;
+                   }
+                 else
+                   {           /* indefinite length method */
+                     _asn1_set_value (p, "-1", 3);
+                     move = DOWN;
+                   }
+               }
+             break;
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SET_OF:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 if (len2 == -1)
+                   {           /* indefinite length method */
+                     if ((counter + 2) > len)
+                       return ASN1_DER_ERROR;
+                     if ((der[counter]) || der[counter + 1])
+                       {
+                         _asn1_append_sequence_set (p);
+                         p = p->down;
+                         while (p->right)
+                           p = p->right;
+                         move = RIGHT;
+                         continue;
+                       }
+                     _asn1_set_value (p, NULL, 0);
+                     counter += 2;
+                   }
+                 else
+                   {           /* definite length method */
+                     if (len2 > counter)
+                       {
+                         _asn1_append_sequence_set (p);
+                         p = p->down;
+                         while (p->right)
+                           p = p->right;
+                         move = RIGHT;
+                         continue;
+                       }
+                     _asn1_set_value (p, NULL, 0);
+                     if (len2 != counter)
+                       {
+                         asn1_delete_structure (element);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if (len3)
+                   {
+                     if (len3 > 0)
+                       {       /* definite length method */
+                         _asn1_ltostr (counter + len3, temp);
+                         tlen = strlen (temp);
+
+                         if (tlen > 0)
+                           _asn1_set_value (p, temp, tlen + 1);
+                       }
+                     else
+                       {       /* indefinite length method */
+                         _asn1_set_value (p, "-1", 3);
+                       }
+                     p2 = p->down;
+                     while ((type_field (p2->type) == TYPE_TAG)
+                            || (type_field (p2->type) == TYPE_SIZE))
+                       p2 = p2->right;
+                     if (p2->right == NULL)
+                       _asn1_append_sequence_set (p);
+                     p = p2;
+                   }
+               }
+             move = RIGHT;
+             break;
+           case TYPE_ANY:
+             if (asn1_get_tag_der
+                 (der + counter, len - counter, &class, &len2,
+                  &tag) != ASN1_SUCCESS)
+               return ASN1_DER_ERROR;
+             if (counter + len2 > len)
+               return ASN1_DER_ERROR;
+             len4 =
+               asn1_get_length_der (der + counter + len2,
+                                    len - counter - len2, &len3);
+             if (len4 < -1)
+               return ASN1_DER_ERROR;
+             if (len4 > len - counter + len2 + len3)
+               return ASN1_DER_ERROR;
+             if (len4 != -1)
+               {
+                 len2 += len4;
+                 _asn1_set_value_octet (p, der + counter, len2 + len3);
+                 counter += len2 + len3;
+               }
+             else
+               {               /* indefinite length */
+                 /* Check indefinite lenth method in an EXPLICIT TAG */
+                 if ((p->type & CONST_TAG) && (der[counter - 1] == 0x80))
+                   indefinite = 1;
+                 else
+                   indefinite = 0;
+
+                 len2 = len - counter;
+                 ris =
+                   _asn1_get_indefinite_length_string (der + counter, &len2);
+                 if (ris != ASN1_SUCCESS)
+                   {
+                     asn1_delete_structure (element);
+                     return ris;
+                   }
+
+                 _asn1_set_value_octet (p, der + counter, len2);
+                 counter += len2;
+
+                 /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with
+                    an indefinite length method. */
+                 if (indefinite)
+                   {
+                     if (!der[counter] && !der[counter + 1])
+                       {
+                         counter += 2;
+                       }
+                     else
+                       {
+                         asn1_delete_structure (element);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+               }
+             move = RIGHT;
+             break;
+           default:
+             move = (move == UP) ? RIGHT : DOWN;
+             break;
+           }
+       }
+
+      if (p == node && move != DOWN)
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+      if ((move == RIGHT) && !(p->type & CONST_SET))
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  _asn1_delete_not_used (*element);
+
+  if (counter != len)
+    {
+      asn1_delete_structure (element);
+      return ASN1_DER_ERROR;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+#define FOUND        1
+#define SAME_BRANCH  2
+#define OTHER_BRANCH 3
+#define EXIT         4
+
+/**
+ * asn1_der_decoding_element:
+ * @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
+ * %ASN1_TYPE_EMPTY.
+ *
+ * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND
+ *   if ELEMENT is %ASN1_TYPE_EMPTY or @elementName == NULL, and
+ *   %ASN1_TAG_ERROR or %ASN1_DER_ERROR if the der encoding doesn't
+ *   match the structure @structure (*ELEMENT deleted).
+ **/
+asn1_retCode
+asn1_der_decoding_element (ASN1_TYPE * structure, const char *elementName,
+                          const void *ider, int len, char *errorDescription)
+{
+  ASN1_TYPE node, p, p2, p3, nodeFound = ASN1_TYPE_EMPTY;
+  char temp[128], currentName[ASN1_MAX_NAME_SIZE * 10], *dot_p, *char_p;
+  int nameLen = ASN1_MAX_NAME_SIZE * 10 - 1, state;
+  int counter, len2, len3, len4, move, ris, tlen;
+  unsigned char class, *temp2;
+  unsigned long tag;
+  int indefinite, result;
+  const unsigned char *der = ider;
+
+  node = *structure;
+
+  if (node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (elementName == NULL)
+    {
+      asn1_delete_structure (structure);
+      return ASN1_ELEMENT_NOT_FOUND;
+    }
+
+  if (node->type & CONST_OPTION)
+    {
+      asn1_delete_structure (structure);
+      return ASN1_GENERIC_ERROR;
+    }
+
+  if ((*structure)->name)
+    {                          /* Has *structure got a name? */
+      nameLen -= strlen ((*structure)->name);
+      if (nameLen > 0)
+       strcpy (currentName, (*structure)->name);
+      else
+       {
+         asn1_delete_structure (structure);
+         return ASN1_MEM_ERROR;
+       }
+      if (!(strcmp (currentName, elementName)))
+       {
+         state = FOUND;
+         nodeFound = *structure;
+       }
+      else if (!memcmp (currentName, elementName, strlen (currentName)))
+       state = SAME_BRANCH;
+      else
+       state = OTHER_BRANCH;
+    }
+  else
+    {                          /* *structure doesn't have a name? */
+      currentName[0] = 0;
+      if (elementName[0] == 0)
+       {
+         state = FOUND;
+         nodeFound = *structure;
+       }
+      else
+       {
+         state = SAME_BRANCH;
+       }
+    }
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+
+      ris = ASN1_SUCCESS;
+
+      if (move != UP)
+       {
+         if (p->type & CONST_SET)
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter == len2)
+               {
+                 p = p2;
+                 move = UP;
+                 continue;
+               }
+             else if (counter > len2)
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+             p2 = p2->down;
+             while (p2)
+               {
+                 if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED))
+                   {
+                     if (type_field (p2->type) != TYPE_CHOICE)
+                       ris =
+                         _asn1_extract_tag_der (p2, der + counter,
+                                                len - counter, &len2);
+                     else
+                       {
+                         p3 = p2->down;
+                         while (p3)
+                           {
+                             ris =
+                               _asn1_extract_tag_der (p3, der + counter,
+                                                      len - counter, &len2);
+                             if (ris == ASN1_SUCCESS)
+                               break;
+                             p3 = p3->right;
+                           }
+                       }
+                     if (ris == ASN1_SUCCESS)
+                       {
+                         p2->type &= ~CONST_NOT_USED;
+                         p = p2;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+           }
+
+         if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter == len2)
+               {
+                 if (p->right)
+                   {
+                     p2 = p->right;
+                     move = RIGHT;
+                   }
+                 else
+                   move = UP;
+
+                 if (p->type & CONST_OPTION)
+                   asn1_delete_structure (&p);
+
+                 p = p2;
+                 continue;
+               }
+           }
+
+         if (type_field (p->type) == TYPE_CHOICE)
+           {
+             while (p->down)
+               {
+                 if (counter < len)
+                   ris =
+                     _asn1_extract_tag_der (p->down, der + counter,
+                                            len - counter, &len2);
+                 else
+                   ris = ASN1_DER_ERROR;
+                 if (ris == ASN1_SUCCESS)
+                   {
+                     while (p->down->right)
+                       {
+                         p2 = p->down->right;
+                         asn1_delete_structure (&p2);
+                       }
+                     break;
+                   }
+                 else if (ris == ASN1_ERROR_TYPE_ANY)
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_ERROR_TYPE_ANY;
+                   }
+                 else
+                   {
+                     p2 = p->down;
+                     asn1_delete_structure (&p2);
+                   }
+               }
+
+             if (p->down == NULL)
+               {
+                 if (!(p->type & CONST_OPTION))
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_DER_ERROR;
+                   }
+               }
+             else
+               p = p->down;
+           }
+
+         if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (counter > len2)
+               ris = ASN1_TAG_ERROR;
+           }
+
+         if (ris == ASN1_SUCCESS)
+           ris =
+             _asn1_extract_tag_der (p, der + counter, len - counter, &len2);
+         if (ris != ASN1_SUCCESS)
+           {
+             if (p->type & CONST_OPTION)
+               {
+                 p->type |= CONST_NOT_USED;
+                 move = RIGHT;
+               }
+             else if (p->type & CONST_DEFAULT)
+               {
+                 _asn1_set_value (p, NULL, 0);
+                 move = RIGHT;
+               }
+             else
+               {
+                 if (errorDescription != NULL)
+                   _asn1_error_description_tag_error (p, errorDescription);
+
+                 asn1_delete_structure (structure);
+                 return ASN1_TAG_ERROR;
+               }
+           }
+         else
+           counter += len2;
+       }
+
+      if (ris == ASN1_SUCCESS)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_NULL:
+             if (der[counter])
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+
+             if (p == nodeFound)
+               state = EXIT;
+
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_BOOLEAN:
+             if (der[counter++] != 1)
+               {
+                 asn1_delete_structure (structure);
+                 return ASN1_DER_ERROR;
+               }
+
+             if (state == FOUND)
+               {
+                 if (der[counter++] == 0)
+                   _asn1_set_value (p, "F", 1);
+                 else
+                   _asn1_set_value (p, "T", 1);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+
+               }
+             else
+               counter++;
+
+             move = RIGHT;
+             break;
+           case TYPE_INTEGER:
+           case TYPE_ENUMERATED:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (state == FOUND)
+               {
+                 if (len3 + len2 > len - counter)
+                   return ASN1_DER_ERROR;
+                 _asn1_set_value (p, der + counter, len3 + len2);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_OBJECT_ID:
+             if (state == FOUND)
+               {
+                 result =
+                   _asn1_get_objectid_der (der + counter, len - counter,
+                                           &len2, temp, sizeof (temp));
+                 if (result != ASN1_SUCCESS)
+                   {
+                     return result;
+                   }
+
+                 tlen = strlen (temp);
+
+                 if (tlen > 0)
+                   _asn1_set_value (p, temp, tlen + 1);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               {
+                 len2 =
+                   asn1_get_length_der (der + counter, len - counter, &len3);
+                 if (len2 < 0)
+                   return ASN1_DER_ERROR;
+                 len2 += len3;
+               }
+
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_TIME:
+             if (state == FOUND)
+               {
+                 result =
+                   _asn1_get_time_der (der + counter, len - counter, &len2,
+                                       temp, sizeof (temp) - 1);
+                 if (result != ASN1_SUCCESS)
+                   {
+                     asn1_delete_structure (structure);
+                     return result;
+                   }
+
+                 tlen = strlen (temp);
+                 if (tlen > 0)
+                   _asn1_set_value (p, temp, tlen + 1);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               {
+                 len2 =
+                   asn1_get_length_der (der + counter, len - counter, &len3);
+                 if (len2 < 0)
+                   return ASN1_DER_ERROR;
+                 len2 += len3;
+               }
+
+             counter += len2;
+             move = RIGHT;
+             break;
+           case TYPE_OCTET_STRING:
+             len3 = len - counter;
+             if (state == FOUND)
+               {
+                 ris = _asn1_get_octet_string (der + counter, p, &len3);
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               ris = _asn1_get_octet_string (der + counter, NULL, &len3);
+
+             if (ris != ASN1_SUCCESS)
+               return ris;
+             counter += len3;
+             move = RIGHT;
+             break;
+           case TYPE_GENERALSTRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (state == FOUND)
+               {
+                 if (len3 + len2 > len - counter)
+                   return ASN1_DER_ERROR;
+                 _asn1_set_value (p, der + counter, len3 + len2);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_BIT_STRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             if (state == FOUND)
+               {
+                 if (len3 + len2 > len - counter)
+                   return ASN1_DER_ERROR;
+                 _asn1_set_value (p, der + counter, len3 + len2);
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_SEQUENCE:
+           case TYPE_SET:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 _asn1_set_value (p, NULL, 0);
+                 if (len2 == -1)
+                   {           /* indefinite length method */
+                     if ((der[counter]) || der[counter + 1])
+                       {
+                         asn1_delete_structure (structure);
+                         return ASN1_DER_ERROR;
+                       }
+                     counter += 2;
+                   }
+                 else
+                   {           /* definite length method */
+                     if (len2 != counter)
+                       {
+                         asn1_delete_structure (structure);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+                 if (p == nodeFound)
+                   state = EXIT;
+                 move = RIGHT;
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 if (state == OTHER_BRANCH)
+                   {
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2 + len3;
+                     move = RIGHT;
+                   }
+                 else
+                   {           /*  state==SAME_BRANCH or state==FOUND */
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2;
+                     if (len3 > 0)
+                       {
+                         _asn1_ltostr (counter + len3, temp);
+                         tlen = strlen (temp);
+
+                         if (tlen > 0)
+                           _asn1_set_value (p, temp, tlen + 1);
+                         move = DOWN;
+                       }
+                     else if (len3 == 0)
+                       {
+                         p2 = p->down;
+                         while (p2)
+                           {
+                             if (type_field (p2->type) != TYPE_TAG)
+                               {
+                                 p3 = p2->right;
+                                 asn1_delete_structure (&p2);
+                                 p2 = p3;
+                               }
+                             else
+                               p2 = p2->right;
+                           }
+                         move = RIGHT;
+                       }
+                     else
+                       {       /* indefinite length method */
+                         _asn1_set_value (p, "-1", 3);
+                         move = DOWN;
+                       }
+                   }
+               }
+             break;
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SET_OF:
+             if (move == UP)
+               {
+                 len2 = strtol (p->value, NULL, 10);
+                 if (len2 > counter)
+                   {
+                     _asn1_append_sequence_set (p);
+                     p = p->down;
+                     while (p->right)
+                       p = p->right;
+                     move = RIGHT;
+                     continue;
+                   }
+                 _asn1_set_value (p, NULL, 0);
+                 if (len2 != counter)
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_DER_ERROR;
+                   }
+
+                 if (p == nodeFound)
+                   state = EXIT;
+               }
+             else
+               {               /* move==DOWN || move==RIGHT */
+                 if (state == OTHER_BRANCH)
+                   {
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2 + len3;
+                     move = RIGHT;
+                   }
+                 else
+                   {           /* state==FOUND or state==SAME_BRANCH */
+                     len3 =
+                       asn1_get_length_der (der + counter, len - counter,
+                                            &len2);
+                     if (len3 < 0)
+                       return ASN1_DER_ERROR;
+                     counter += len2;
+                     if (len3)
+                       {
+                         _asn1_ltostr (counter + len3, temp);
+                         tlen = strlen (temp);
+
+                         if (tlen > 0)
+                           _asn1_set_value (p, temp, tlen + 1);
+                         p2 = p->down;
+                         while ((type_field (p2->type) == TYPE_TAG)
+                                || (type_field (p2->type) == TYPE_SIZE))
+                           p2 = p2->right;
+                         if (p2->right == NULL)
+                           _asn1_append_sequence_set (p);
+                         p = p2;
+                         state = FOUND;
+                       }
+                   }
+               }
+
+             break;
+           case TYPE_ANY:
+             if (asn1_get_tag_der
+                 (der + counter, len - counter, &class, &len2,
+                  &tag) != ASN1_SUCCESS)
+               return ASN1_DER_ERROR;
+             if (counter + len2 > len)
+               return ASN1_DER_ERROR;
+
+             len4 =
+               asn1_get_length_der (der + counter + len2,
+                                    len - counter - len2, &len3);
+             if (len4 < -1)
+               return ASN1_DER_ERROR;
+
+             if (len4 != -1)
+               {
+                 len2 += len4;
+                 if (state == FOUND)
+                   {
+                     _asn1_set_value_octet (p, der + counter, len2 + len3);
+                     temp2 = NULL;
+
+                     if (p == nodeFound)
+                       state = EXIT;
+                   }
+                 counter += len2 + len3;
+               }
+             else
+               {               /* indefinite length */
+                 /* Check indefinite lenth method in an EXPLICIT TAG */
+                 if ((p->type & CONST_TAG) && (der[counter - 1] == 0x80))
+                   indefinite = 1;
+                 else
+                   indefinite = 0;
+
+                 len2 = len - counter;
+                 ris =
+                   _asn1_get_indefinite_length_string (der + counter, &len2);
+                 if (ris != ASN1_SUCCESS)
+                   {
+                     asn1_delete_structure (structure);
+                     return ris;
+                   }
+
+                 if (state == FOUND)
+                   {
+                     _asn1_set_value_octet (p, der + counter, len2);
+
+                     if (p == nodeFound)
+                       state = EXIT;
+                   }
+
+                 counter += len2;
+
+                 /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with
+                    an indefinite length method. */
+                 if (indefinite)
+                   {
+                     if (!der[counter] && !der[counter + 1])
+                       {
+                         counter += 2;
+                       }
+                     else
+                       {
+                         asn1_delete_structure (structure);
+                         return ASN1_DER_ERROR;
+                       }
+                   }
+               }
+             move = RIGHT;
+             break;
+
+           default:
+             move = (move == UP) ? RIGHT : DOWN;
+             break;
+           }
+       }
+
+      if ((p == node && move != DOWN) || (state == EXIT))
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           {
+             p = p->down;
+
+             if (state != FOUND)
+               {
+                 nameLen -= strlen (p->name) + 1;
+                 if (nameLen > 0)
+                   {
+                     if (currentName[0])
+                       strcat (currentName, ".");
+                     strcat (currentName, p->name);
+                   }
+                 else
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_MEM_ERROR;
+                   }
+                 if (!(strcmp (currentName, elementName)))
+                   {
+                     state = FOUND;
+                     nodeFound = p;
+                   }
+                 else
+                   if (!memcmp
+                       (currentName, elementName, strlen (currentName)))
+                   state = SAME_BRANCH;
+                 else
+                   state = OTHER_BRANCH;
+               }
+           }
+         else
+           move = RIGHT;
+       }
+
+      if ((move == RIGHT) && !(p->type & CONST_SET))
+       {
+         if (p->right)
+           {
+             p = p->right;
+
+             if (state != FOUND)
+               {
+                 dot_p = char_p = currentName;
+                 while ((char_p = strchr (char_p, '.')))
+                   {
+                     dot_p = char_p++;
+                     dot_p++;
+                   }
+
+                 nameLen += strlen (currentName) - (dot_p - currentName);
+                 *dot_p = 0;
+
+                 nameLen -= strlen (p->name);
+                 if (nameLen > 0)
+                   strcat (currentName, p->name);
+                 else
+                   {
+                     asn1_delete_structure (structure);
+                     return ASN1_MEM_ERROR;
+                   }
+
+                 if (!(strcmp (currentName, elementName)))
+                   {
+                     state = FOUND;
+                     nodeFound = p;
+                   }
+                 else
+                   if (!memcmp
+                       (currentName, elementName, strlen (currentName)))
+                   state = SAME_BRANCH;
+                 else
+                   state = OTHER_BRANCH;
+               }
+           }
+         else
+           move = UP;
+       }
+
+      if (move == UP)
+       {
+         p = _asn1_find_up (p);
+
+         if (state != FOUND)
+           {
+             dot_p = char_p = currentName;
+             while ((char_p = strchr (char_p, '.')))
+               {
+                 dot_p = char_p++;
+                 dot_p++;
+               }
+
+             nameLen += strlen (currentName) - (dot_p - currentName);
+             *dot_p = 0;
+
+             if (!(strcmp (currentName, elementName)))
+               {
+                 state = FOUND;
+                 nodeFound = p;
+               }
+             else
+               if (!memcmp (currentName, elementName, strlen (currentName)))
+               state = SAME_BRANCH;
+             else
+               state = OTHER_BRANCH;
+           }
+       }
+    }
+
+  _asn1_delete_not_used (*structure);
+
+  if (counter > len)
+    {
+      asn1_delete_structure (structure);
+      return ASN1_DER_ERROR;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+/**
+ * asn1_der_decoding_startEnd:
+ * @element: pointer to an ASN1 element
+ * @ider: vector that contains the DER encoding.
+ * @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.
+ *
+ * Returns: %ASN1_SUCCESS if DER encoding OK, %ASN1_ELEMENT_NOT_FOUND
+ *   if ELEMENT is %ASN1_TYPE 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_retCode
+asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len,
+                           const char *name_element, int *start, int *end)
+{
+  ASN1_TYPE node, node_to_find, p, p2, p3;
+  int counter, len2, len3, len4, move, ris;
+  unsigned char class;
+  unsigned long tag;
+  int indefinite;
+  const unsigned char *der = ider;
+
+  node = element;
+
+  if (node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  node_to_find = asn1_find_node (node, name_element);
+
+  if (node_to_find == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (node_to_find == node)
+    {
+      *start = 0;
+      *end = len - 1;
+      return ASN1_SUCCESS;
+    }
+
+  if (node->type & CONST_OPTION)
+    return ASN1_GENERIC_ERROR;
+
+  counter = 0;
+  move = DOWN;
+  p = node;
+  while (1)
+    {
+      ris = ASN1_SUCCESS;
+
+      if (move != UP)
+       {
+         if (p->type & CONST_SET)
+           {
+             p2 = _asn1_find_up (p);
+             len2 = strtol (p2->value, NULL, 10);
+             if (len2 == -1)
+               {
+                 if (!der[counter] && !der[counter + 1])
+                   {
+                     p = p2;
+                     move = UP;
+                     counter += 2;
+                     continue;
+                   }
+               }
+             else if (counter == len2)
+               {
+                 p = p2;
+                 move = UP;
+                 continue;
+               }
+             else if (counter > len2)
+               return ASN1_DER_ERROR;
+             p2 = p2->down;
+             while (p2)
+               {
+                 if ((p2->type & CONST_SET) && (p2->type & CONST_NOT_USED))
+                   {           /* CONTROLLARE */
+                     if (type_field (p2->type) != TYPE_CHOICE)
+                       ris =
+                         _asn1_extract_tag_der (p2, der + counter,
+                                                len - counter, &len2);
+                     else
+                       {
+                         p3 = p2->down;
+                         ris =
+                           _asn1_extract_tag_der (p3, der + counter,
+                                                  len - counter, &len2);
+                       }
+                     if (ris == ASN1_SUCCESS)
+                       {
+                         p2->type &= ~CONST_NOT_USED;
+                         p = p2;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               return ASN1_DER_ERROR;
+           }
+
+         if (p == node_to_find)
+           *start = counter;
+
+         if (type_field (p->type) == TYPE_CHOICE)
+           {
+             p = p->down;
+             ris =
+               _asn1_extract_tag_der (p, der + counter, len - counter,
+                                      &len2);
+             if (p == node_to_find)
+               *start = counter;
+           }
+
+         if (ris == ASN1_SUCCESS)
+           ris =
+             _asn1_extract_tag_der (p, der + counter, len - counter, &len2);
+         if (ris != ASN1_SUCCESS)
+           {
+             if (p->type & CONST_OPTION)
+               {
+                 p->type |= CONST_NOT_USED;
+                 move = RIGHT;
+               }
+             else if (p->type & CONST_DEFAULT)
+               {
+                 move = RIGHT;
+               }
+             else
+               {
+                 return ASN1_TAG_ERROR;
+               }
+           }
+         else
+           counter += len2;
+       }
+
+      if (ris == ASN1_SUCCESS)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_NULL:
+             if (der[counter])
+               return ASN1_DER_ERROR;
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_BOOLEAN:
+             if (der[counter++] != 1)
+               return ASN1_DER_ERROR;
+             counter++;
+             move = RIGHT;
+             break;
+           case TYPE_INTEGER:
+           case TYPE_ENUMERATED:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_OBJECT_ID:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len2 + len3;
+             move = RIGHT;
+             break;
+           case TYPE_TIME:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len2 + len3;
+             move = RIGHT;
+             break;
+           case TYPE_OCTET_STRING:
+             len3 = len - counter;
+             ris = _asn1_get_octet_string (der + counter, NULL, &len3);
+             if (ris != ASN1_SUCCESS)
+               return ris;
+             counter += len3;
+             move = RIGHT;
+             break;
+           case TYPE_GENERALSTRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_BIT_STRING:
+             len2 =
+               asn1_get_length_der (der + counter, len - counter, &len3);
+             if (len2 < 0)
+               return ASN1_DER_ERROR;
+             counter += len3 + len2;
+             move = RIGHT;
+             break;
+           case TYPE_SEQUENCE:
+           case TYPE_SET:
+             if (move != UP)
+               {
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if (len3 == 0)
+                   move = RIGHT;
+                 else
+                   move = DOWN;
+               }
+             else
+               {
+                 if (!der[counter] && !der[counter + 1])       /* indefinite length method */
+                   counter += 2;
+                 move = RIGHT;
+               }
+             break;
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SET_OF:
+             if (move != UP)
+               {
+                 len3 =
+                   asn1_get_length_der (der + counter, len - counter, &len2);
+                 if (len3 < -1)
+                   return ASN1_DER_ERROR;
+                 counter += len2;
+                 if ((len3 == -1) && !der[counter] && !der[counter + 1])
+                   counter += 2;
+                 else if (len3)
+                   {
+                     p2 = p->down;
+                     while ((type_field (p2->type) == TYPE_TAG) ||
+                            (type_field (p2->type) == TYPE_SIZE))
+                       p2 = p2->right;
+                     p = p2;
+                   }
+               }
+             else
+               {
+                 if (!der[counter] && !der[counter + 1])       /* indefinite length method */
+                   counter += 2;
+               }
+             move = RIGHT;
+             break;
+           case TYPE_ANY:
+             if (asn1_get_tag_der
+                 (der + counter, len - counter, &class, &len2,
+                  &tag) != ASN1_SUCCESS)
+               return ASN1_DER_ERROR;
+             if (counter + len2 > len)
+               return ASN1_DER_ERROR;
+
+             len4 =
+               asn1_get_length_der (der + counter + len2,
+                                    len - counter - len2, &len3);
+             if (len4 < -1)
+               return ASN1_DER_ERROR;
+
+             if (len4 != -1)
+               {
+                 counter += len2 + len4 + len3;
+               }
+             else
+               {               /* indefinite length */
+                 /* Check indefinite lenth method in an EXPLICIT TAG */
+                 if ((p->type & CONST_TAG) && (der[counter - 1] == 0x80))
+                   indefinite = 1;
+                 else
+                   indefinite = 0;
+
+                 len2 = len - counter;
+                 ris =
+                   _asn1_get_indefinite_length_string (der + counter, &len2);
+                 if (ris != ASN1_SUCCESS)
+                   return ris;
+                 counter += len2;
+
+                 /* Check if a couple of 0x00 are present due to an EXPLICIT TAG with
+                    an indefinite length method. */
+                 if (indefinite)
+                   {
+                     if (!der[counter] && !der[counter + 1])
+                       counter += 2;
+                     else
+                       return ASN1_DER_ERROR;
+                   }
+               }
+             move = RIGHT;
+             break;
+           default:
+             move = (move == UP) ? RIGHT : DOWN;
+             break;
+           }
+       }
+
+      if ((p == node_to_find) && (move == RIGHT))
+       {
+         *end = counter - 1;
+         return ASN1_SUCCESS;
+       }
+
+      if (p == node && move != DOWN)
+       break;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+      if ((move == RIGHT) && !(p->type & CONST_SET))
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_ELEMENT_NOT_FOUND;
+}
+
+/**
+ * asn1_expand_any_defined_by:
+ * @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_retCode
+asn1_expand_any_defined_by (ASN1_TYPE definitions, ASN1_TYPE * element)
+{
+  char definitionsName[ASN1_MAX_NAME_SIZE], name[2 * ASN1_MAX_NAME_SIZE + 1],
+    value[ASN1_MAX_NAME_SIZE];
+  asn1_retCode retCode = ASN1_SUCCESS, result;
+  int len, len2, len3;
+  ASN1_TYPE p, p2, p3, aux = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  if ((definitions == ASN1_TYPE_EMPTY) || (*element == ASN1_TYPE_EMPTY))
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  strcpy (definitionsName, definitions->name);
+  strcat (definitionsName, ".");
+
+  p = *element;
+  while (p)
+    {
+
+      switch (type_field (p->type))
+       {
+       case TYPE_ANY:
+         if ((p->type & CONST_DEFINED_BY) && (p->value))
+           {
+             /* search the "DEF_BY" element */
+             p2 = p->down;
+             while ((p2) && (type_field (p2->type) != TYPE_CONSTANT))
+               p2 = p2->right;
+
+             if (!p2)
+               {
+                 retCode = ASN1_ERROR_TYPE_ANY;
+                 break;
+               }
+
+             p3 = _asn1_find_up (p);
+
+             if (!p3)
+               {
+                 retCode = ASN1_ERROR_TYPE_ANY;
+                 break;
+               }
+
+             p3 = p3->down;
+             while (p3)
+               {
+                 if ((p3->name) && !(strcmp (p3->name, p2->name)))
+                   break;
+                 p3 = p3->right;
+               }
+
+             if ((!p3) || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                 (p3->value == NULL))
+               {
+
+                 p3 = _asn1_find_up (p);
+                 p3 = _asn1_find_up (p3);
+
+                 if (!p3)
+                   {
+                     retCode = ASN1_ERROR_TYPE_ANY;
+                     break;
+                   }
+
+                 p3 = p3->down;
+
+                 while (p3)
+                   {
+                     if ((p3->name) && !(strcmp (p3->name, p2->name)))
+                       break;
+                     p3 = p3->right;
+                   }
+
+                 if ((!p3) || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                     (p3->value == NULL))
+                   {
+                     retCode = ASN1_ERROR_TYPE_ANY;
+                     break;
+                   }
+               }
+
+             /* search the OBJECT_ID into definitions */
+             p2 = definitions->down;
+             while (p2)
+               {
+                 if ((type_field (p2->type) == TYPE_OBJECT_ID) &&
+                     (p2->type & CONST_ASSIGN))
+                   {
+                     strcpy (name, definitionsName);
+                     strcat (name, p2->name);
+
+                     len = ASN1_MAX_NAME_SIZE;
+                     result =
+                       asn1_read_value (definitions, name, value, &len);
+
+                     if ((result == ASN1_SUCCESS)
+                         && (!strcmp (p3->value, value)))
+                       {
+                         p2 = p2->right;       /* pointer to the structure to
+                                                  use for expansion */
+                         while ((p2) && (p2->type & CONST_ASSIGN))
+                           p2 = p2->right;
+
+                         if (p2)
+                           {
+                             strcpy (name, definitionsName);
+                             strcat (name, p2->name);
+
+                             result =
+                               asn1_create_element (definitions, name, &aux);
+                             if (result == ASN1_SUCCESS)
+                               {
+                                 _asn1_set_name (aux, p->name);
+                                 len2 =
+                                   asn1_get_length_der (p->value,
+                                                        p->value_len, &len3);
+                                 if (len2 < 0)
+                                   return ASN1_DER_ERROR;
+
+                                 result =
+                                   asn1_der_decoding (&aux, p->value + len3,
+                                                      len2,
+                                                      errorDescription);
+                                 if (result == ASN1_SUCCESS)
+                                   {
+
+                                     _asn1_set_right (aux, p->right);
+                                     _asn1_set_right (p, aux);
+
+                                     result = asn1_delete_structure (&p);
+                                     if (result == ASN1_SUCCESS)
+                                       {
+                                         p = aux;
+                                         aux = ASN1_TYPE_EMPTY;
+                                         break;
+                                       }
+                                     else
+                                       {       /* error with asn1_delete_structure */
+                                         asn1_delete_structure (&aux);
+                                         retCode = result;
+                                         break;
+                                       }
+                                   }
+                                 else
+                                   {   /* error with asn1_der_decoding */
+                                     retCode = result;
+                                     break;
+                                   }
+                               }
+                             else
+                               {       /* error with asn1_create_element */
+                                 retCode = result;
+                                 break;
+                               }
+                           }
+                         else
+                           {   /* error with the pointer to the structure to exapand */
+                             retCode = ASN1_ERROR_TYPE_ANY;
+                             break;
+                           }
+                       }
+                   }
+                 p2 = p2->right;
+               }               /* end while */
+
+             if (!p2)
+               {
+                 retCode = ASN1_ERROR_TYPE_ANY;
+                 break;
+               }
+
+           }
+         break;
+       default:
+         break;
+       }
+
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p == *element)
+       {
+         p = NULL;
+         break;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == *element)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  return retCode;
+}
+
+/**
+ * asn1_expand_octet_string:
+ * @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_retCode
+asn1_expand_octet_string (ASN1_TYPE definitions, ASN1_TYPE * element,
+                         const char *octetName, const char *objectName)
+{
+  char name[2 * ASN1_MAX_NAME_SIZE + 1], value[ASN1_MAX_NAME_SIZE];
+  asn1_retCode retCode = ASN1_SUCCESS, result;
+  int len, len2, len3;
+  ASN1_TYPE p2, aux = ASN1_TYPE_EMPTY;
+  ASN1_TYPE octetNode = ASN1_TYPE_EMPTY, objectNode = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+
+  if ((definitions == ASN1_TYPE_EMPTY) || (*element == ASN1_TYPE_EMPTY))
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  octetNode = asn1_find_node (*element, octetName);
+  if (octetNode == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+  if (type_field (octetNode->type) != TYPE_OCTET_STRING)
+    return ASN1_ELEMENT_NOT_FOUND;
+  if (octetNode->value == NULL)
+    return ASN1_VALUE_NOT_FOUND;
+
+  objectNode = asn1_find_node (*element, objectName);
+  if (objectNode == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (type_field (objectNode->type) != TYPE_OBJECT_ID)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if (objectNode->value == NULL)
+    return ASN1_VALUE_NOT_FOUND;
+
+
+  /* search the OBJECT_ID into definitions */
+  p2 = definitions->down;
+  while (p2)
+    {
+      if ((type_field (p2->type) == TYPE_OBJECT_ID) &&
+         (p2->type & CONST_ASSIGN))
+       {
+         strcpy (name, definitions->name);
+         strcat (name, ".");
+         strcat (name, p2->name);
+
+         len = sizeof (value);
+         result = asn1_read_value (definitions, name, value, &len);
+
+         if ((result == ASN1_SUCCESS)
+             && (!strcmp (objectNode->value, value)))
+           {
+
+             p2 = p2->right;   /* pointer to the structure to
+                                  use for expansion */
+             while ((p2) && (p2->type & CONST_ASSIGN))
+               p2 = p2->right;
+
+             if (p2)
+               {
+                 strcpy (name, definitions->name);
+                 strcat (name, ".");
+                 strcat (name, p2->name);
+
+                 result = asn1_create_element (definitions, name, &aux);
+                 if (result == ASN1_SUCCESS)
+                   {
+                     _asn1_set_name (aux, octetNode->name);
+                     len2 =
+                       asn1_get_length_der (octetNode->value,
+                                            octetNode->value_len, &len3);
+                     if (len2 < 0)
+                       return ASN1_DER_ERROR;
+
+                     result =
+                       asn1_der_decoding (&aux, octetNode->value + len3,
+                                          len2, errorDescription);
+                     if (result == ASN1_SUCCESS)
+                       {
+
+                         _asn1_set_right (aux, octetNode->right);
+                         _asn1_set_right (octetNode, aux);
+
+                         result = asn1_delete_structure (&octetNode);
+                         if (result == ASN1_SUCCESS)
+                           {
+                             aux = ASN1_TYPE_EMPTY;
+                             break;
+                           }
+                         else
+                           {   /* error with asn1_delete_structure */
+                             asn1_delete_structure (&aux);
+                             retCode = result;
+                             break;
+                           }
+                       }
+                     else
+                       {       /* error with asn1_der_decoding */
+                         retCode = result;
+                         break;
+                       }
+                   }
+                 else
+                   {           /* error with asn1_create_element */
+                     retCode = result;
+                     break;
+                   }
+               }
+             else
+               {               /* error with the pointer to the structure to exapand */
+                 retCode = ASN1_VALUE_NOT_VALID;
+                 break;
+               }
+           }
+       }
+
+      p2 = p2->right;
+
+    }
+
+  if (!p2)
+    retCode = ASN1_VALUE_NOT_VALID;
+
+  return retCode;
+}
diff --git a/lib/element.c b/lib/element.c
new file mode 100644 (file)
index 0000000..51ade14
--- /dev/null
@@ -0,0 +1,992 @@
+/*
+ * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2008, 2009, 2010
+ * Free Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+/*****************************************************/
+/* File: element.c                                   */
+/* Description: Functions with the read and write    */
+/*   functions.                                      */
+/*****************************************************/
+
+
+#include <int.h>
+#include "parser_aux.h"
+#include <gstr.h>
+#include "structure.h"
+
+#include "element.h"
+
+void
+_asn1_hierarchical_name (ASN1_TYPE node, char *name, int name_size)
+{
+  ASN1_TYPE p;
+  char tmp_name[64];
+
+  p = node;
+
+  name[0] = 0;
+
+  while (p != NULL)
+    {
+      if (p->name != NULL)
+       {
+         _asn1_str_cpy (tmp_name, sizeof (tmp_name), name),
+           _asn1_str_cpy (name, name_size, p->name);
+         _asn1_str_cat (name, name_size, ".");
+         _asn1_str_cat (name, name_size, tmp_name);
+       }
+      p = _asn1_find_up (p);
+    }
+
+  if (name[0] == 0)
+    _asn1_str_cpy (name, name_size, "ROOT");
+}
+
+
+/******************************************************************/
+/* Function : _asn1_convert_integer                               */
+/* Description: converts an integer from a null terminated string */
+/*              to der decoding. The convertion from a null       */
+/*              terminated string to an integer is made with      */
+/*              the 'strtol' function.                            */
+/* Parameters:                                                    */
+/*   value: null terminated string to convert.                    */
+/*   value_out: convertion result (memory must be already         */
+/*              allocated).                                       */
+/*   value_out_size: number of bytes of value_out.                */
+/*   len: number of significant byte of value_out.                */
+/* Return: ASN1_MEM_ERROR or ASN1_SUCCESS                         */
+/******************************************************************/
+asn1_retCode
+_asn1_convert_integer (const char *value, unsigned char *value_out,
+                      int value_out_size, int *len)
+{
+  char negative;
+  unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
+  long valtmp;
+  int k, k2;
+
+  valtmp = strtol (value, NULL, 10);
+
+  for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++)
+    {
+      val[SIZEOF_UNSIGNED_LONG_INT - k - 1] = (valtmp >> (8 * k)) & 0xFF;
+    }
+
+  if (val[0] & 0x80)
+    negative = 1;
+  else
+    negative = 0;
+
+  for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT - 1; k++)
+    {
+      if (negative && (val[k] != 0xFF))
+       break;
+      else if (!negative && val[k])
+       break;
+    }
+
+  if ((negative && !(val[k] & 0x80)) || (!negative && (val[k] & 0x80)))
+    k--;
+
+  *len = SIZEOF_UNSIGNED_LONG_INT - k;
+
+  if (SIZEOF_UNSIGNED_LONG_INT - k > value_out_size)
+    /* VALUE_OUT is too short to contain the value conversion */
+    return ASN1_MEM_ERROR;
+
+  for (k2 = k; k2 < SIZEOF_UNSIGNED_LONG_INT; k2++)
+    value_out[k2 - k] = val[k2];
+
+#if 0
+  printf ("_asn1_convert_integer: valueIn=%s, lenOut=%d", value, *len);
+  for (k = 0; k < SIZEOF_UNSIGNED_LONG_INT; k++)
+    printf (", vOut[%d]=%d", k, value_out[k]);
+  printf ("\n");
+#endif
+
+  return ASN1_SUCCESS;
+}
+
+
+int
+_asn1_append_sequence_set (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+  char temp[10];
+  long n;
+
+  if (!node || !(node->down))
+    return ASN1_GENERIC_ERROR;
+
+  p = node->down;
+  while ((type_field (p->type) == TYPE_TAG)
+        || (type_field (p->type) == TYPE_SIZE))
+    p = p->right;
+  p2 = _asn1_copy_structure3 (p);
+  while (p->right)
+    p = p->right;
+  _asn1_set_right (p, p2);
+
+  if (p->name == NULL)
+    _asn1_str_cpy (temp, sizeof (temp), "?1");
+  else
+    {
+      n = strtol (p->name + 1, NULL, 0);
+      n++;
+      temp[0] = '?';
+      _asn1_ltostr (n, temp + 1);
+    }
+  _asn1_set_name (p2, temp);
+  /*  p2->type |= CONST_OPTION; */
+
+  return ASN1_SUCCESS;
+}
+
+
+/**
+ * asn1_write_value:
+ * @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: Set value OK.
+ *
+ *   %ASN1_ELEMENT_NOT_FOUND: NAME is not a valid element.
+ *
+ *   %ASN1_VALUE_NOT_VALID: VALUE has a wrong format.
+ **/
+asn1_retCode
+asn1_write_value (ASN1_TYPE node_root, const char *name,
+                 const void *ivalue, int len)
+{
+  ASN1_TYPE node, p, p2;
+  unsigned char *temp, *value_temp = NULL, *default_temp = NULL;
+  int len2, k, k2, negative;
+  size_t i;
+  const unsigned char *value = ivalue;
+
+  node = asn1_find_node (node_root, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if ((node->type & CONST_OPTION) && (value == NULL) && (len == 0))
+    {
+      asn1_delete_structure (&node);
+      return ASN1_SUCCESS;
+    }
+
+  if ((type_field (node->type) == TYPE_SEQUENCE_OF) && (value == NULL)
+      && (len == 0))
+    {
+      p = node->down;
+      while ((type_field (p->type) == TYPE_TAG)
+            || (type_field (p->type) == TYPE_SIZE))
+       p = p->right;
+
+      while (p->right)
+       asn1_delete_structure (&p->right);
+
+      return ASN1_SUCCESS;
+    }
+
+  switch (type_field (node->type))
+    {
+    case TYPE_BOOLEAN:
+      if (!strcmp (value, "TRUE"))
+       {
+         if (node->type & CONST_DEFAULT)
+           {
+             p = node->down;
+             while (type_field (p->type) != TYPE_DEFAULT)
+               p = p->right;
+             if (p->type & CONST_TRUE)
+               _asn1_set_value (node, NULL, 0);
+             else
+               _asn1_set_value (node, "T", 1);
+           }
+         else
+           _asn1_set_value (node, "T", 1);
+       }
+      else if (!strcmp (value, "FALSE"))
+       {
+         if (node->type & CONST_DEFAULT)
+           {
+             p = node->down;
+             while (type_field (p->type) != TYPE_DEFAULT)
+               p = p->right;
+             if (p->type & CONST_FALSE)
+               _asn1_set_value (node, NULL, 0);
+             else
+               _asn1_set_value (node, "F", 1);
+           }
+         else
+           _asn1_set_value (node, "F", 1);
+       }
+      else
+       return ASN1_VALUE_NOT_VALID;
+      break;
+    case TYPE_INTEGER:
+    case TYPE_ENUMERATED:
+      if (len == 0)
+       {
+         if ((isdigit (value[0])) || (value[0] == '-'))
+           {
+             value_temp =
+               (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+             if (value_temp == NULL)
+               return ASN1_MEM_ALLOC_ERROR;
+
+             _asn1_convert_integer (value, value_temp,
+                                    SIZEOF_UNSIGNED_LONG_INT, &len);
+           }
+         else
+           {                   /* is an identifier like v1 */
+             if (!(node->type & CONST_LIST))
+               return ASN1_VALUE_NOT_VALID;
+             p = node->down;
+             while (p)
+               {
+                 if (type_field (p->type) == TYPE_CONSTANT)
+                   {
+                     if ((p->name) && (!strcmp (p->name, value)))
+                       {
+                         value_temp =
+                           (unsigned char *)
+                           _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+                         if (value_temp == NULL)
+                           return ASN1_MEM_ALLOC_ERROR;
+
+                         _asn1_convert_integer (p->value,
+                                                value_temp,
+                                                SIZEOF_UNSIGNED_LONG_INT,
+                                                &len);
+                         break;
+                       }
+                   }
+                 p = p->right;
+               }
+             if (p == NULL)
+               return ASN1_VALUE_NOT_VALID;
+           }
+       }
+      else
+       {                       /* len != 0 */
+         value_temp = (unsigned char *) _asn1_malloc (len);
+         if (value_temp == NULL)
+           return ASN1_MEM_ALLOC_ERROR;
+         memcpy (value_temp, value, len);
+       }
+
+
+      if (value_temp[0] & 0x80)
+       negative = 1;
+      else
+       negative = 0;
+
+      if (negative && (type_field (node->type) == TYPE_ENUMERATED))
+       {
+         _asn1_free (value_temp);
+         return ASN1_VALUE_NOT_VALID;
+       }
+
+      for (k = 0; k < len - 1; k++)
+       if (negative && (value_temp[k] != 0xFF))
+         break;
+       else if (!negative && value_temp[k])
+         break;
+
+      if ((negative && !(value_temp[k] & 0x80)) ||
+         (!negative && (value_temp[k] & 0x80)))
+       k--;
+
+      _asn1_set_value_octet (node, value_temp + k, len - k);
+
+      if (node->type & CONST_DEFAULT)
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if ((isdigit (p->value[0])) || (p->value[0] == '-'))
+           {
+             default_temp =
+               (unsigned char *) _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+             if (default_temp == NULL)
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_MEM_ALLOC_ERROR;
+               }
+
+             _asn1_convert_integer (p->value, default_temp,
+                                    SIZEOF_UNSIGNED_LONG_INT, &len2);
+           }
+         else
+           {                   /* is an identifier like v1 */
+             if (!(node->type & CONST_LIST))
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_VALUE_NOT_VALID;
+               }
+             p2 = node->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) == TYPE_CONSTANT)
+                   {
+                     if ((p2->name) && (!strcmp (p2->name, p->value)))
+                       {
+                         default_temp =
+                           (unsigned char *)
+                           _asn1_malloc (SIZEOF_UNSIGNED_LONG_INT);
+                         if (default_temp == NULL)
+                           {
+                             _asn1_free (value_temp);
+                             return ASN1_MEM_ALLOC_ERROR;
+                           }
+
+                         _asn1_convert_integer (p2->value,
+                                                default_temp,
+                                                SIZEOF_UNSIGNED_LONG_INT,
+                                                &len2);
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             if (p2 == NULL)
+               {
+                 _asn1_free (value_temp);
+                 return ASN1_VALUE_NOT_VALID;
+               }
+           }
+
+
+         if ((len - k) == len2)
+           {
+             for (k2 = 0; k2 < len2; k2++)
+               if (value_temp[k + k2] != default_temp[k2])
+                 {
+                   break;
+                 }
+             if (k2 == len2)
+               _asn1_set_value (node, NULL, 0);
+           }
+         _asn1_free (default_temp);
+       }
+      _asn1_free (value_temp);
+      break;
+    case TYPE_OBJECT_ID:
+      for (i = 0; i < strlen (value); i++)
+       if ((!isdigit (value[i])) && (value[i] != '.') && (value[i] != '+'))
+         return ASN1_VALUE_NOT_VALID;
+      if (node->type & CONST_DEFAULT)
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if (!strcmp (value, p->value))
+           {
+             _asn1_set_value (node, NULL, 0);
+             break;
+           }
+       }
+      _asn1_set_value (node, value, strlen (value) + 1);
+      break;
+    case TYPE_TIME:
+      if (node->type & CONST_UTC)
+       {
+         if (strlen (value) < 11)
+           return ASN1_VALUE_NOT_VALID;
+         for (k = 0; k < 10; k++)
+           if (!isdigit (value[k]))
+             return ASN1_VALUE_NOT_VALID;
+         switch (strlen (value))
+           {
+           case 11:
+             if (value[10] != 'Z')
+               return ASN1_VALUE_NOT_VALID;
+             break;
+           case 13:
+             if ((!isdigit (value[10])) || (!isdigit (value[11])) ||
+                 (value[12] != 'Z'))
+               return ASN1_VALUE_NOT_VALID;
+             break;
+           case 15:
+             if ((value[10] != '+') && (value[10] != '-'))
+               return ASN1_VALUE_NOT_VALID;
+             for (k = 11; k < 15; k++)
+               if (!isdigit (value[k]))
+                 return ASN1_VALUE_NOT_VALID;
+             break;
+           case 17:
+             if ((!isdigit (value[10])) || (!isdigit (value[11])))
+               return ASN1_VALUE_NOT_VALID;
+             if ((value[12] != '+') && (value[12] != '-'))
+               return ASN1_VALUE_NOT_VALID;
+             for (k = 13; k < 17; k++)
+               if (!isdigit (value[k]))
+                 return ASN1_VALUE_NOT_VALID;
+             break;
+           default:
+             return ASN1_VALUE_NOT_FOUND;
+           }
+         _asn1_set_value (node, value, strlen (value) + 1);
+       }
+      else
+       {                       /* GENERALIZED TIME */
+         if (value)
+           _asn1_set_value (node, value, strlen (value) + 1);
+       }
+      break;
+    case TYPE_OCTET_STRING:
+      if (len == 0)
+       len = strlen (value);
+      _asn1_set_value_octet (node, value, len);
+      break;
+    case TYPE_GENERALSTRING:
+      if (len == 0)
+       len = strlen (value);
+      _asn1_set_value_octet (node, value, len);
+      break;
+    case TYPE_BIT_STRING:
+      if (len == 0)
+       len = strlen (value);
+      asn1_length_der ((len >> 3) + 2, NULL, &len2);
+      temp = (unsigned char *) _asn1_malloc ((len >> 3) + 2 + len2);
+      if (temp == NULL)
+       return ASN1_MEM_ALLOC_ERROR;
+
+      asn1_bit_der (value, len, temp, &len2);
+      _asn1_set_value_m (node, temp, len2);
+      temp = NULL;
+      break;
+    case TYPE_CHOICE:
+      p = node->down;
+      while (p)
+       {
+         if (!strcmp (p->name, value))
+           {
+             p2 = node->down;
+             while (p2)
+               {
+                 if (p2 != p)
+                   {
+                     asn1_delete_structure (&p2);
+                     p2 = node->down;
+                   }
+                 else
+                   p2 = p2->right;
+               }
+             break;
+           }
+         p = p->right;
+       }
+      if (!p)
+       return ASN1_ELEMENT_NOT_FOUND;
+      break;
+    case TYPE_ANY:
+      _asn1_set_value_octet (node, value, len);
+      break;
+    case TYPE_SEQUENCE_OF:
+    case TYPE_SET_OF:
+      if (strcmp (value, "NEW"))
+       return ASN1_VALUE_NOT_VALID;
+      _asn1_append_sequence_set (node);
+      break;
+    default:
+      return ASN1_ELEMENT_NOT_FOUND;
+      break;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+#define PUT_VALUE( ptr, ptr_size, data, data_size) \
+       *len = data_size; \
+       if (ptr_size < data_size) { \
+               return ASN1_MEM_ERROR; \
+       } else { \
+               memcpy( ptr, data, data_size); \
+       }
+
+#define PUT_STR_VALUE( ptr, ptr_size, data) \
+       *len = strlen(data) + 1; \
+       if (ptr_size < *len) { \
+               return ASN1_MEM_ERROR; \
+       } else { \
+               /* this strcpy is checked */ \
+               strcpy(ptr, data); \
+       }
+
+#define ADD_STR_VALUE( ptr, ptr_size, data) \
+       *len = (int) strlen(data) + 1; \
+       if (ptr_size < (int) strlen(ptr)+(*len)) { \
+               return ASN1_MEM_ERROR; \
+       } else { \
+               /* this strcat is checked */ \
+               strcat(ptr, data); \
+       }
+
+/**
+ * asn1_read_value:
+ * @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.
+ * @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 the function "read_value" 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.
+ *
+ * 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: Set value OK.
+ *
+ *   %ASN1_ELEMENT_NOT_FOUND: NAME is not a valid element.
+ *
+ *   %ASN1_VALUE_NOT_FOUND: There isn't any value for the element selected.
+ *
+ *   %ASN1_MEM_ERROR: The value vector isn't big enough to store the result.
+ *   In this case LEN will contain the number of bytes needed.
+ **/
+asn1_retCode
+asn1_read_value (ASN1_TYPE root, const char *name, void *ivalue, int *len)
+{
+  ASN1_TYPE node, p, p2;
+  int len2, len3;
+  int value_size = *len;
+  unsigned char *value = ivalue;
+
+  node = asn1_find_node (root, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  if ((type_field (node->type) != TYPE_NULL) &&
+      (type_field (node->type) != TYPE_CHOICE) &&
+      !(node->type & CONST_DEFAULT) && !(node->type & CONST_ASSIGN) &&
+      (node->value == NULL))
+    return ASN1_VALUE_NOT_FOUND;
+
+  switch (type_field (node->type))
+    {
+    case TYPE_NULL:
+      PUT_STR_VALUE (value, value_size, "NULL");
+      break;
+    case TYPE_BOOLEAN:
+      if ((node->type & CONST_DEFAULT) && (node->value == NULL))
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if (p->type & CONST_TRUE)
+           {
+             PUT_STR_VALUE (value, value_size, "TRUE");
+           }
+         else
+           {
+             PUT_STR_VALUE (value, value_size, "FALSE");
+           }
+       }
+      else if (node->value[0] == 'T')
+       {
+         PUT_STR_VALUE (value, value_size, "TRUE");
+       }
+      else
+       {
+         PUT_STR_VALUE (value, value_size, "FALSE");
+       }
+      break;
+    case TYPE_INTEGER:
+    case TYPE_ENUMERATED:
+      if ((node->type & CONST_DEFAULT) && (node->value == NULL))
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         if ((isdigit (p->value[0])) || (p->value[0] == '-')
+             || (p->value[0] == '+'))
+           {
+             if (_asn1_convert_integer
+                 (p->value, value, value_size, len) != ASN1_SUCCESS)
+               return ASN1_MEM_ERROR;
+           }
+         else
+           {                   /* is an identifier like v1 */
+             p2 = node->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) == TYPE_CONSTANT)
+                   {
+                     if ((p2->name) && (!strcmp (p2->name, p->value)))
+                       {
+                         if (_asn1_convert_integer
+                             (p2->value, value, value_size,
+                              len) != ASN1_SUCCESS)
+                           return ASN1_MEM_ERROR;
+                         break;
+                       }
+                   }
+                 p2 = p2->right;
+               }
+           }
+       }
+      else
+       {
+         len2 = -1;
+         if (asn1_get_octet_der
+             (node->value, node->value_len, &len2, value, value_size,
+              len) != ASN1_SUCCESS)
+           return ASN1_MEM_ERROR;
+       }
+      break;
+    case TYPE_OBJECT_ID:
+      if (node->type & CONST_ASSIGN)
+       {
+         value[0] = 0;
+         p = node->down;
+         while (p)
+           {
+             if (type_field (p->type) == TYPE_CONSTANT)
+               {
+                 ADD_STR_VALUE (value, value_size, p->value);
+                 if (p->right)
+                   {
+                     ADD_STR_VALUE (value, value_size, ".");
+                   }
+               }
+             p = p->right;
+           }
+         *len = strlen (value) + 1;
+       }
+      else if ((node->type & CONST_DEFAULT) && (node->value == NULL))
+       {
+         p = node->down;
+         while (type_field (p->type) != TYPE_DEFAULT)
+           p = p->right;
+         PUT_STR_VALUE (value, value_size, p->value);
+       }
+      else
+       {
+         PUT_STR_VALUE (value, value_size, node->value);
+       }
+      break;
+    case TYPE_TIME:
+      PUT_STR_VALUE (value, value_size, node->value);
+      break;
+    case TYPE_OCTET_STRING:
+      len2 = -1;
+      if (asn1_get_octet_der
+         (node->value, node->value_len, &len2, value, value_size,
+          len) != ASN1_SUCCESS)
+       return ASN1_MEM_ERROR;
+      break;
+    case TYPE_GENERALSTRING:
+      len2 = -1;
+      if (asn1_get_octet_der
+         (node->value, node->value_len, &len2, value, value_size,
+          len) != ASN1_SUCCESS)
+       return ASN1_MEM_ERROR;
+      break;
+    case TYPE_BIT_STRING:
+      len2 = -1;
+      if (asn1_get_bit_der
+         (node->value, node->value_len, &len2, value, value_size,
+          len) != ASN1_SUCCESS)
+       return ASN1_MEM_ERROR;
+      break;
+    case TYPE_CHOICE:
+      PUT_STR_VALUE (value, value_size, node->down->name);
+      break;
+    case TYPE_ANY:
+      len3 = -1;
+      len2 = asn1_get_length_der (node->value, node->value_len, &len3);
+      if (len2 < 0)
+       return ASN1_DER_ERROR;
+      PUT_VALUE (value, value_size, node->value + len3, len2);
+      break;
+    default:
+      return ASN1_ELEMENT_NOT_FOUND;
+      break;
+    }
+  return ASN1_SUCCESS;
+}
+
+
+/**
+ * asn1_read_tag:
+ * @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: Set value OK.
+ *
+ *   %ASN1_ELEMENT_NOT_FOUND: NAME is not a valid element.
+ **/
+asn1_retCode
+asn1_read_tag (ASN1_TYPE root, const char *name, int *tagValue,
+              int *classValue)
+{
+  ASN1_TYPE node, p, pTag;
+
+  node = asn1_find_node (root, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node->down;
+
+  /* pTag will points to the IMPLICIT TAG */
+  pTag = NULL;
+  if (node->type & CONST_TAG)
+    {
+      while (p)
+       {
+         if (type_field (p->type) == TYPE_TAG)
+           {
+             if ((p->type & CONST_IMPLICIT) && (pTag == NULL))
+               pTag = p;
+             else if (p->type & CONST_EXPLICIT)
+               pTag = NULL;
+           }
+         p = p->right;
+       }
+    }
+
+  if (pTag)
+    {
+      *tagValue = strtoul (pTag->value, NULL, 10);
+
+      if (pTag->type & CONST_APPLICATION)
+       *classValue = ASN1_CLASS_APPLICATION;
+      else if (pTag->type & CONST_UNIVERSAL)
+       *classValue = ASN1_CLASS_UNIVERSAL;
+      else if (pTag->type & CONST_PRIVATE)
+       *classValue = ASN1_CLASS_PRIVATE;
+      else
+       *classValue = ASN1_CLASS_CONTEXT_SPECIFIC;
+    }
+  else
+    {
+      *classValue = ASN1_CLASS_UNIVERSAL;
+
+      switch (type_field (node->type))
+       {
+       case TYPE_NULL:
+         *tagValue = ASN1_TAG_NULL;
+         break;
+       case TYPE_BOOLEAN:
+         *tagValue = ASN1_TAG_BOOLEAN;
+         break;
+       case TYPE_INTEGER:
+         *tagValue = ASN1_TAG_INTEGER;
+         break;
+       case TYPE_ENUMERATED:
+         *tagValue = ASN1_TAG_ENUMERATED;
+         break;
+       case TYPE_OBJECT_ID:
+         *tagValue = ASN1_TAG_OBJECT_ID;
+         break;
+       case TYPE_TIME:
+         if (node->type & CONST_UTC)
+           {
+             *tagValue = ASN1_TAG_UTCTime;
+           }
+         else
+           *tagValue = ASN1_TAG_GENERALIZEDTime;
+         break;
+       case TYPE_OCTET_STRING:
+         *tagValue = ASN1_TAG_OCTET_STRING;
+         break;
+       case TYPE_GENERALSTRING:
+         *tagValue = ASN1_TAG_GENERALSTRING;
+         break;
+       case TYPE_BIT_STRING:
+         *tagValue = ASN1_TAG_BIT_STRING;
+         break;
+       case TYPE_SEQUENCE:
+       case TYPE_SEQUENCE_OF:
+         *tagValue = ASN1_TAG_SEQUENCE;
+         break;
+       case TYPE_SET:
+       case TYPE_SET_OF:
+         *tagValue = ASN1_TAG_SET;
+         break;
+       case TYPE_TAG:
+       case TYPE_CHOICE:
+       case TYPE_ANY:
+         break;
+       default:
+         break;
+       }
+    }
+
+
+  return ASN1_SUCCESS;
+
+}
diff --git a/lib/element.h b/lib/element.h
new file mode 100644 (file)
index 0000000..95c382a
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2008, 2009, 2010
+ * Free Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#ifndef _ELEMENT_H
+#define _ELEMENT_H
+
+
+asn1_retCode _asn1_append_sequence_set (ASN1_TYPE node);
+
+asn1_retCode _asn1_convert_integer (const char *value,
+                                   unsigned char *value_out,
+                                   int value_out_size, int *len);
+
+void _asn1_hierarchical_name (ASN1_TYPE node, char *name, int name_size);
+
+#endif
diff --git a/lib/errors.c b/lib/errors.c
new file mode 100644 (file)
index 0000000..052c64f
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2002, 2005, 2006, 2008, 2009, 2010 Free Software
+ * Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#include <int.h>
+#ifdef STDC_HEADERS
+# include <stdarg.h>
+#endif
+
+#define LIBTASN1_ERROR_ENTRY(name) { #name, name }
+
+struct libtasn1_error_entry
+{
+  const char *name;
+  int number;
+};
+typedef struct libtasn1_error_entry libtasn1_error_entry;
+
+static const libtasn1_error_entry error_algorithms[] = {
+  LIBTASN1_ERROR_ENTRY (ASN1_SUCCESS),
+  LIBTASN1_ERROR_ENTRY (ASN1_FILE_NOT_FOUND),
+  LIBTASN1_ERROR_ENTRY (ASN1_ELEMENT_NOT_FOUND),
+  LIBTASN1_ERROR_ENTRY (ASN1_IDENTIFIER_NOT_FOUND),
+  LIBTASN1_ERROR_ENTRY (ASN1_DER_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_VALUE_NOT_FOUND),
+  LIBTASN1_ERROR_ENTRY (ASN1_GENERIC_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_VALUE_NOT_VALID),
+  LIBTASN1_ERROR_ENTRY (ASN1_TAG_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_TAG_IMPLICIT),
+  LIBTASN1_ERROR_ENTRY (ASN1_ERROR_TYPE_ANY),
+  LIBTASN1_ERROR_ENTRY (ASN1_SYNTAX_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_MEM_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_MEM_ALLOC_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_DER_OVERFLOW),
+  LIBTASN1_ERROR_ENTRY (ASN1_NAME_TOO_LONG),
+  LIBTASN1_ERROR_ENTRY (ASN1_ARRAY_ERROR),
+  LIBTASN1_ERROR_ENTRY (ASN1_ELEMENT_NOT_EMPTY),
+  {0, 0}
+};
+
+/**
+ * asn1_perror:
+ * @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.
+ *
+ * This function replaces libtasn1_perror() in older libtasn1.
+ *
+ * Since: 1.6
+ **/
+void
+asn1_perror (asn1_retCode error)
+{
+  const char *str = asn1_strerror (error);
+  fprintf (stderr, "LIBTASN1 ERROR: %s\n", str ? str : "(null)");
+}
+
+/**
+ * asn1_strerror:
+ * @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.
+ *
+ * This function replaces libtasn1_strerror() in older libtasn1.
+ *
+ * Returns: Pointer to static zero-terminated string describing error
+ *   code.
+ *
+ * Since: 1.6
+ **/
+const char *
+asn1_strerror (asn1_retCode error)
+{
+  const libtasn1_error_entry *p;
+
+  for (p = error_algorithms; p->name != NULL; p++)
+    if (p->number == error)
+      return p->name + sizeof ("ASN1_") - 1;
+
+  return NULL;
+}
+
+#ifndef ASN1_DISABLE_DEPRECATED
+
+/* Compatibility mappings to preserve ABI. */
+
+/**
+ * libtasn1_perror:
+ * @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.
+ *
+ * Deprecated: Use asn1_perror() instead.
+ **/
+void
+libtasn1_perror (asn1_retCode error)
+{
+  asn1_perror (error);
+}
+
+/**
+ * libtasn1_strerror:
+ * @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.
+ *
+ * Deprecated: Use asn1_strerror() instead.
+ **/
+const char *
+libtasn1_strerror (asn1_retCode error)
+{
+  return asn1_strerror (error);
+}
+
+#endif
diff --git a/lib/gllib/Makefile.am b/lib/gllib/Makefile.am
new file mode 100644 (file)
index 0000000..05fc4a2
--- /dev/null
@@ -0,0 +1,354 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib/gllib --m4-base=lib/glm4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl=2 --libtool --macro-prefix=lgl --no-vc-files lib-symbol-versions lib-symbol-visibility stdint strverscmp
+
+AUTOMAKE_OPTIONS = 1.5 gnits
+
+SUBDIRS =
+noinst_HEADERS =
+noinst_LIBRARIES =
+noinst_LTLIBRARIES =
+EXTRA_DIST =
+BUILT_SOURCES =
+SUFFIXES =
+MOSTLYCLEANFILES = core *.stackdump
+MOSTLYCLEANDIRS =
+CLEANFILES =
+DISTCLEANFILES =
+MAINTAINERCLEANFILES =
+
+AM_CPPFLAGS =
+AM_CFLAGS =
+
+noinst_LTLIBRARIES += libgnu.la
+
+libgnu_la_SOURCES =
+libgnu_la_LIBADD = $(lgl_LTLIBOBJS)
+libgnu_la_DEPENDENCIES = $(lgl_LTLIBOBJS)
+EXTRA_libgnu_la_SOURCES =
+libgnu_la_LDFLAGS = $(AM_LDFLAGS)
+
+## begin gnulib module arg-nonnull
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += arg-nonnull.h
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
+arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/GL_ARG_NONNULL/,$$p' \
+         < $(top_srcdir)/build-aux/arg-nonnull.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
+
+ARG_NONNULL_H=arg-nonnull.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/arg-nonnull.h
+
+## end   gnulib module arg-nonnull
+
+## begin gnulib module c++defs
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+BUILT_SOURCES += c++defs.h
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/c++defs.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/_GL_CXXDEFS/,$$p' \
+         < $(top_srcdir)/build-aux/c++defs.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += c++defs.h c++defs.h-t
+
+CXXDEFS_H=c++defs.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/c++defs.h
+
+## end   gnulib module c++defs
+
+## begin gnulib module lib-symbol-visibility
+
+# The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the
+# compilation of all sources that make up the library. This line here does it
+# only for the gnulib part of it. The developer is responsible for adding
+# $(CFLAG_VISIBILITY) to the Makefile.ams of the other portions of the library.
+AM_CFLAGS += $(CFLAG_VISIBILITY)
+
+## end   gnulib module lib-symbol-visibility
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+stddef.h: stddef.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(srcdir)/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stddef.h stddef.h-t
+
+EXTRA_DIST += stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             < $(srcdir)/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += stdint.h stdint.h-t
+
+EXTRA_DIST += stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module string
+
+BUILT_SOURCES += string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
+             -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
+             -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
+             -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
+             -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
+             -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
+             -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
+             -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
+             -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
+             -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
+             -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
+             -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
+             -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
+             -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
+             -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
+             -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
+             -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
+             -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
+             -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
+             -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
+             -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
+             -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
+             -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
+             -e 's|@''GNULIB_STRNCAT''@|$(GNULIB_STRNCAT)|g' \
+             -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
+             -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
+             -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
+             -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
+             -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
+             -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
+             -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
+             -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
+             -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
+             -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
+             < $(srcdir)/string.in.h | \
+         sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(srcdir)/string.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += string.h string.h-t
+
+EXTRA_DIST += string.in.h
+
+## end   gnulib module string
+
+## begin gnulib module strverscmp
+
+
+EXTRA_DIST += strverscmp.c
+
+EXTRA_libgnu_la_SOURCES += strverscmp.c
+
+## end   gnulib module strverscmp
+
+## begin gnulib module warn-on-use
+
+BUILT_SOURCES += warn-on-use.h
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/warn-on-use.h, except that it has the copyright header cut off.
+warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/^.ifndef/,$$p' \
+         < $(top_srcdir)/build-aux/warn-on-use.h \
+         > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
+
+WARN_ON_USE_H=warn-on-use.h
+
+EXTRA_DIST += $(top_srcdir)/build-aux/warn-on-use.h
+
+## end   gnulib module warn-on-use
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
+             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
+             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
+             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
+             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
+             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
+             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
+             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
+             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
+             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
+             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+           < $(srcdir)/wchar.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += wchar.h wchar.h-t
+
+EXTRA_DIST += wchar.in.h
+
+## end   gnulib module wchar
+
+## begin gnulib module dummy
+
+libgnu_la_SOURCES += dummy.c
+
+## end   gnulib module dummy
+
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
diff --git a/lib/gllib/Makefile.in b/lib/gllib/Makefile.in
new file mode 100644 (file)
index 0000000..1144e6b
--- /dev/null
@@ -0,0 +1,1271 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=lib/gllib --m4-base=lib/glm4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --lgpl=2 --libtool --macro-prefix=lgl --no-vc-files lib-symbol-versions lib-symbol-visibility stdint strverscmp
+
+
+
+VPATH = @srcdir@
+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 = lib/gllib
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+am_libgnu_la_OBJECTS = dummy.lo
+libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS)
+libgnu_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
+DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive
+HEADERS = $(noinst_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
+  distclean-recursive maintainer-clean-recursive
+AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
+       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
+       distdir
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+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@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+AUTOMAKE_OPTIONS = 1.5 gnits
+SUBDIRS = 
+noinst_HEADERS = 
+noinst_LIBRARIES = 
+noinst_LTLIBRARIES = libgnu.la
+EXTRA_DIST = $(top_srcdir)/build-aux/arg-nonnull.h \
+       $(top_srcdir)/build-aux/c++defs.h stddef.in.h stdint.in.h \
+       string.in.h strverscmp.c $(top_srcdir)/build-aux/warn-on-use.h \
+       wchar.in.h
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+
+# The BUILT_SOURCES created by this Makefile snippet are not used via #include
+# statements but through direct file reference. Therefore this snippet must be
+# present in all Makefile.am that need it. This is ensured by the applicability
+# 'all' defined above.
+BUILT_SOURCES = arg-nonnull.h c++defs.h $(STDDEF_H) $(STDINT_H) \
+       string.h warn-on-use.h wchar.h
+SUFFIXES = 
+MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \
+       c++defs.h c++defs.h-t stddef.h stddef.h-t stdint.h stdint.h-t \
+       string.h string.h-t warn-on-use.h warn-on-use.h-t wchar.h \
+       wchar.h-t
+MOSTLYCLEANDIRS = 
+CLEANFILES = 
+DISTCLEANFILES = 
+MAINTAINERCLEANFILES = 
+AM_CPPFLAGS = 
+
+# The value of $(CFLAG_VISIBILITY) needs to be added to the CFLAGS for the
+# compilation of all sources that make up the library. This line here does it
+# only for the gnulib part of it. The developer is responsible for adding
+# $(CFLAG_VISIBILITY) to the Makefile.ams of the other portions of the library.
+AM_CFLAGS = $(CFLAG_VISIBILITY)
+libgnu_la_SOURCES = dummy.c
+libgnu_la_LIBADD = $(lgl_LTLIBOBJS)
+libgnu_la_DEPENDENCIES = $(lgl_LTLIBOBJS)
+EXTRA_libgnu_la_SOURCES = strverscmp.c
+libgnu_la_LDFLAGS = $(AM_LDFLAGS)
+ARG_NONNULL_H = arg-nonnull.h
+CXXDEFS_H = c++defs.h
+WARN_ON_USE_H = warn-on-use.h
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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) --gnits lib/gllib/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnits lib/gllib/Makefile
+.PRECIOUS: 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):
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+clean-noinstLTLIBRARIES:
+       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+       @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) 
+       $(libgnu_la_LINK)  $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+# 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.
+$(RECURSIVE_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; 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"
+
+$(RECURSIVE_CLEAN_TARGETS):
+       @fail= failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       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; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+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 \
+           test -d "$(distdir)/$$subdir" \
+           || $(MKDIR_P) "$(distdir)/$$subdir" \
+           || exit 1; \
+         fi; \
+       done
+       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           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
+check-am: all-am
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-recursive
+all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS)
+installdirs: installdirs-recursive
+installdirs-am:
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) 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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+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)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+       clean-noinstLTLIBRARIES mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool mostlyclean-local
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \
+       ctags-recursive install install-am install-strip \
+       tags-recursive
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+       all all-am check check-am clean clean-generic clean-libtool \
+       clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \
+       ctags-recursive distclean distclean-compile 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-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \
+       pdf-am ps ps-am tags tags-recursive uninstall uninstall-am
+
+# The arg-nonnull.h that gets inserted into generated .h files is the same as
+# build-aux/arg-nonnull.h, except that it has the copyright header cut off.
+arg-nonnull.h: $(top_srcdir)/build-aux/arg-nonnull.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/GL_ARG_NONNULL/,$$p' \
+         < $(top_srcdir)/build-aux/arg-nonnull.h \
+         > $@-t && \
+       mv $@-t $@
+# The c++defs.h that gets inserted into generated .h files is the same as
+# build-aux/c++defs.h, except that it has the copyright header cut off.
+c++defs.h: $(top_srcdir)/build-aux/c++defs.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/_GL_CXXDEFS/,$$p' \
+         < $(top_srcdir)/build-aux/c++defs.h \
+         > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+stddef.h: stddef.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(srcdir)/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+stdint.h: stdint.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             < $(srcdir)/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+string.h: string.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \
+             -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \
+             -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \
+             -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \
+             -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \
+             -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \
+             -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \
+             -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \
+             -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \
+             -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \
+             -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \
+             -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \
+             -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \
+             -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \
+             -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \
+             -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \
+             -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \
+             -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \
+             -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \
+             -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \
+             -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \
+             -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \
+             -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \
+             -e 's|@''GNULIB_STRNCAT''@|$(GNULIB_STRNCAT)|g' \
+             -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \
+             -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \
+             -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \
+             -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \
+             -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \
+             -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \
+             -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \
+             -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \
+             -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \
+             -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \
+             < $(srcdir)/string.in.h | \
+         sed -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(srcdir)/string.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+# The warn-on-use.h that gets inserted into generated .h files is the same as
+# build-aux/warn-on-use.h, except that it has the copyright header cut off.
+warn-on-use.h: $(top_srcdir)/build-aux/warn-on-use.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       sed -n -e '/^.ifndef/,$$p' \
+         < $(top_srcdir)/build-aux/warn-on-use.h \
+         > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+wchar.h: wchar.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \
+             -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \
+             -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \
+             -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \
+             -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \
+             -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \
+             -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \
+             -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \
+             -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \
+             -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \
+             -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \
+             -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+             -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+           < $(srcdir)/wchar.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
+
+# 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/lib/gllib/dummy.c b/lib/gllib/dummy.c
new file mode 100644 (file)
index 0000000..907573b
--- /dev/null
@@ -0,0 +1,42 @@
+/* A dummy file, to prevent empty libraries from breaking builds.
+   Copyright (C) 2004, 2007, 2009, 2010 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+/* Some systems, reportedly OpenBSD and Mac OS X, refuse to create
+   libraries without any object files.  You might get an error like:
+
+   > ar cru .libs/libgl.a
+   > ar: no archive members specified
+
+   Compiling this file, and adding its object file to the library, will
+   prevent the library from being empty.  */
+
+/* Some systems, such as Solaris with cc 5.0, refuse to work with libraries
+   that don't export any symbol.  You might get an error like:
+
+   > cc ... libgnu.a
+   > ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a
+
+   Compiling this file, and adding its object file to the library, will
+   prevent the library from exporting no symbols.  */
+
+#ifdef __sun
+/* This declaration ensures that the library will export at least 1 symbol.  */
+int gl_dummy_symbol;
+#else
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
+#endif
diff --git a/lib/gllib/stddef.in.h b/lib/gllib/stddef.in.h
new file mode 100644 (file)
index 0000000..c8900d5
--- /dev/null
@@ -0,0 +1,86 @@
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * POSIX 2008 <stddef.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_wchar_t || defined __need_size_t  \
+  || defined __need_ptrdiff_t || defined __need_NULL \
+  || defined __need_wint_t
+/* Special invocation convention inside gcc header files.  In
+   particular, gcc provides a version of <stddef.h> that blindly
+   redefines NULL even when __need_wint_t was defined, even though
+   wint_t is not normally provided by <stddef.h>.  Hence, we must
+   remember if special invocation has ever been used to obtain wint_t,
+   in which case we need to clean up NULL yet again.  */
+
+# if !(defined _GL_STDDEF_H && defined _GL_STDDEF_WINT_T)
+#  ifdef __need_wint_t
+#   undef _GL_STDDEF_H
+#   define _GL_STDDEF_WINT_T
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+# endif
+
+#else
+/* Normal invocation convention.  */
+
+# ifndef _GL_STDDEF_H
+
+/* The include_next requires a split double-inclusion guard.  */
+
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+#  ifndef _GL_STDDEF_H
+#   define _GL_STDDEF_H
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+#if @REPLACE_NULL@
+# undef NULL
+# ifdef __cplusplus
+   /* ISO C++ says that the macro NULL must expand to an integer constant
+      expression, hence '((void *) 0)' is not allowed in C++.  */
+#  if __GNUG__ >= 3
+    /* GNU C++ has a __null macro that behaves like an integer ('int' or
+       'long') but has the same size as a pointer.  Use that, to avoid
+       warnings.  */
+#   define NULL __null
+#  else
+#   define NULL 0L
+#  endif
+# else
+#  define NULL ((void *) 0)
+# endif
+#endif
+
+/* Some platforms lack wchar_t.  */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+#  endif /* _GL_STDDEF_H */
+# endif /* _GL_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/lib/gllib/stdint.in.h b/lib/gllib/stdint.in.h
new file mode 100644 (file)
index 0000000..3f14433
--- /dev/null
@@ -0,0 +1,568 @@
+/* Copyright (C) 2001-2002, 2004-2010 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _GL_STDINT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _GL_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _GL_STDINT_H
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   MacOS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after @NEXT_STDINT_H@.  */
+#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+# include <sys/types.h>
+#endif
+
+/* Get LONG_MIN, LONG_MAX, ULONG_MAX.  */
+#include <limits.h>
+
+#if @HAVE_INTTYPES_H@
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+# include <inttypes.h>
+#elif @HAVE_SYS_INTTYPES_H@
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+# include <sys/inttypes.h>
+#endif
+
+#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+# include <sys/bitypes.h>
+#endif
+
+#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for a integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+#define _STDINT_MIN(signed, bits, zero) \
+  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
+
+#define _STDINT_MAX(signed, bits, zero) \
+  ((signed) \
+   ? ~ _STDINT_MIN (signed, bits, zero) \
+   : /* The expression for the unsigned case.  The subtraction of (signed) \
+        is a nop in the unsigned case and avoids "signed integer overflow" \
+        warnings in the signed case.  */ \
+     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef int8_t
+#undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+#define int8_t gl_int8_t
+#define uint8_t gl_uint8_t
+
+#undef int16_t
+#undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+#define int16_t gl_int16_t
+#define uint16_t gl_uint16_t
+
+#undef int32_t
+#undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+#define int32_t gl_int32_t
+#define uint32_t gl_uint32_t
+
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+#if LONG_MAX >> 31 >> 31 == 1
+# undef int64_t
+typedef long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#elif defined _MSC_VER
+# undef int64_t
+typedef __int64 gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#elif @HAVE_LONG_LONG_INT@
+# undef int64_t
+typedef long long int gl_int64_t;
+# define int64_t gl_int64_t
+# define GL_INT64_T
+#endif
+
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# undef uint64_t
+typedef unsigned long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#elif defined _MSC_VER
+# undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+# define uint64_t gl_uint64_t
+# define GL_UINT64_T
+#endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+#define _UINT8_T
+#define _UINT32_T
+#define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef int_least8_t
+#undef uint_least8_t
+#undef int_least16_t
+#undef uint_least16_t
+#undef int_least32_t
+#undef uint_least32_t
+#undef int_least64_t
+#undef uint_least64_t
+#define int_least8_t int8_t
+#define uint_least8_t uint8_t
+#define int_least16_t int16_t
+#define uint_least16_t uint16_t
+#define int_least32_t int32_t
+#define uint_least32_t uint32_t
+#ifdef GL_INT64_T
+# define int_least64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_least64_t uint64_t
+#endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  Assume that 'long int'
+   is fast enough for all narrower integers.  */
+
+#undef int_fast8_t
+#undef uint_fast8_t
+#undef int_fast16_t
+#undef uint_fast16_t
+#undef int_fast32_t
+#undef uint_fast32_t
+#undef int_fast64_t
+#undef uint_fast64_t
+typedef long int gl_int_fast8_t;
+typedef unsigned long int gl_uint_fast8_t;
+typedef long int gl_int_fast16_t;
+typedef unsigned long int gl_uint_fast16_t;
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+#define int_fast8_t gl_int_fast8_t
+#define uint_fast8_t gl_uint_fast8_t
+#define int_fast16_t gl_int_fast16_t
+#define uint_fast16_t gl_uint_fast16_t
+#define int_fast32_t gl_int_fast32_t
+#define uint_fast32_t gl_uint_fast32_t
+#ifdef GL_INT64_T
+# define int_fast64_t int64_t
+#endif
+#ifdef GL_UINT64_T
+# define uint_fast64_t uint64_t
+#endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+#undef intptr_t
+#undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+#define intptr_t gl_intptr_t
+#define uintptr_t gl_uintptr_t
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+#undef intmax_t
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+#elif defined GL_INT64_T
+# define intmax_t int64_t
+#else
+typedef long int gl_intmax_t;
+# define intmax_t gl_intmax_t
+#endif
+
+#undef uintmax_t
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+#elif defined GL_UINT64_T
+# define uintmax_t uint64_t
+#else
+typedef unsigned long int gl_uintmax_t;
+# define uintmax_t gl_uintmax_t
+#endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1];
+
+/* 7.18.2. Limits of specified-width integer types */
+
+#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+#undef INT8_MIN
+#undef INT8_MAX
+#undef UINT8_MAX
+#define INT8_MIN  (~ INT8_MAX)
+#define INT8_MAX  127
+#define UINT8_MAX  255
+
+#undef INT16_MIN
+#undef INT16_MAX
+#undef UINT16_MAX
+#define INT16_MIN  (~ INT16_MAX)
+#define INT16_MAX  32767
+#define UINT16_MAX  65535
+
+#undef INT32_MIN
+#undef INT32_MAX
+#undef UINT32_MAX
+#define INT32_MIN  (~ INT32_MAX)
+#define INT32_MAX  2147483647
+#define UINT32_MAX  4294967295U
+
+#undef INT64_MIN
+#undef INT64_MAX
+#ifdef GL_INT64_T
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+# define INT64_MIN  (- INTMAX_C (1) << 63)
+# define INT64_MAX  INTMAX_C (9223372036854775807)
+#endif
+
+#undef UINT64_MAX
+#ifdef GL_UINT64_T
+# define UINT64_MAX  UINTMAX_C (18446744073709551615)
+#endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+#undef INT_LEAST8_MIN
+#undef INT_LEAST8_MAX
+#undef UINT_LEAST8_MAX
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX  UINT8_MAX
+
+#undef INT_LEAST16_MIN
+#undef INT_LEAST16_MAX
+#undef UINT_LEAST16_MAX
+#define INT_LEAST16_MIN  INT16_MIN
+#define INT_LEAST16_MAX  INT16_MAX
+#define UINT_LEAST16_MAX  UINT16_MAX
+
+#undef INT_LEAST32_MIN
+#undef INT_LEAST32_MAX
+#undef UINT_LEAST32_MAX
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX  UINT32_MAX
+
+#undef INT_LEAST64_MIN
+#undef INT_LEAST64_MAX
+#ifdef GL_INT64_T
+# define INT_LEAST64_MIN  INT64_MIN
+# define INT_LEAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_LEAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_LEAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+#undef INT_FAST8_MIN
+#undef INT_FAST8_MAX
+#undef UINT_FAST8_MAX
+#define INT_FAST8_MIN  LONG_MIN
+#define INT_FAST8_MAX  LONG_MAX
+#define UINT_FAST8_MAX  ULONG_MAX
+
+#undef INT_FAST16_MIN
+#undef INT_FAST16_MAX
+#undef UINT_FAST16_MAX
+#define INT_FAST16_MIN  LONG_MIN
+#define INT_FAST16_MAX  LONG_MAX
+#define UINT_FAST16_MAX  ULONG_MAX
+
+#undef INT_FAST32_MIN
+#undef INT_FAST32_MAX
+#undef UINT_FAST32_MAX
+#define INT_FAST32_MIN  LONG_MIN
+#define INT_FAST32_MAX  LONG_MAX
+#define UINT_FAST32_MAX  ULONG_MAX
+
+#undef INT_FAST64_MIN
+#undef INT_FAST64_MAX
+#ifdef GL_INT64_T
+# define INT_FAST64_MIN  INT64_MIN
+# define INT_FAST64_MAX  INT64_MAX
+#endif
+
+#undef UINT_FAST64_MAX
+#ifdef GL_UINT64_T
+# define UINT_FAST64_MAX  UINT64_MAX
+#endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+#undef INTPTR_MIN
+#undef INTPTR_MAX
+#undef UINTPTR_MAX
+#define INTPTR_MIN  LONG_MIN
+#define INTPTR_MAX  LONG_MAX
+#define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+#undef INTMAX_MIN
+#undef INTMAX_MAX
+#ifdef INT64_MAX
+# define INTMAX_MIN  INT64_MIN
+# define INTMAX_MAX  INT64_MAX
+#else
+# define INTMAX_MIN  INT32_MIN
+# define INTMAX_MAX  INT32_MAX
+#endif
+
+#undef UINTMAX_MAX
+#ifdef UINT64_MAX
+# define UINTMAX_MAX  UINT64_MAX
+#else
+# define UINTMAX_MAX  UINT32_MAX
+#endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+#undef PTRDIFF_MIN
+#undef PTRDIFF_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+# else
+#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
+#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+# endif
+#else
+# define PTRDIFF_MIN  \
+    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# define PTRDIFF_MAX  \
+    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+#endif
+
+/* sig_atomic_t limits */
+#undef SIG_ATOMIC_MIN
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+#define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+#undef SIZE_MAX
+#if @APPLE_UNIVERSAL_BUILD@
+# ifdef _LP64
+#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+# endif
+#else
+# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+#endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested
+   includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+#if ! (defined WCHAR_MIN && defined WCHAR_MAX)
+# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# include <wchar.h>
+# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#endif
+#undef WCHAR_MIN
+#undef WCHAR_MAX
+#define WCHAR_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+#define WCHAR_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+#undef WINT_MIN
+#undef WINT_MAX
+#define WINT_MIN  \
+   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+#define WINT_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+
+#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */
+
+/* 7.18.4. Macros for integer constants */
+
+#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+#undef INT8_C
+#undef UINT8_C
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#undef INT16_C
+#undef UINT16_C
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#undef INT32_C
+#undef UINT32_C
+#define INT32_C(x) x
+#define UINT32_C(x) x ## U
+
+#undef INT64_C
+#undef UINT64_C
+#if LONG_MAX >> 31 >> 31 == 1
+# define INT64_C(x) x##L
+#elif defined _MSC_VER
+# define INT64_C(x) x##i64
+#elif @HAVE_LONG_LONG_INT@
+# define INT64_C(x) x##LL
+#endif
+#if ULONG_MAX >> 31 >> 31 >> 1 == 1
+# define UINT64_C(x) x##UL
+#elif defined _MSC_VER
+# define UINT64_C(x) x##ui64
+#elif @HAVE_UNSIGNED_LONG_LONG_INT@
+# define UINT64_C(x) x##ULL
+#endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+#undef INTMAX_C
+#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+# define INTMAX_C(x)   x##LL
+#elif defined GL_INT64_T
+# define INTMAX_C(x)   INT64_C(x)
+#else
+# define INTMAX_C(x)   x##L
+#endif
+
+#undef UINTMAX_C
+#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+# define UINTMAX_C(x)  x##ULL
+#elif defined GL_UINT64_T
+# define UINTMAX_C(x)  UINT64_C(x)
+#else
+# define UINTMAX_C(x)  x##UL
+#endif
+
+#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */
+
+#endif /* _GL_STDINT_H */
+#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/lib/gllib/string.in.h b/lib/gllib/string.in.h
new file mode 100644 (file)
index 0000000..2ebe17f
--- /dev/null
@@ -0,0 +1,929 @@
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _GL_STRING_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#ifndef _GL_STRING_H
+#define _GL_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#  define __attribute__(Spec) /* empty */
+# endif
+/* The attribute __pure__ was added in gcc 2.96.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
+#  define __pure__ /* empty */
+# endif
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if @GNULIB_MEMCHR@
+# if @REPLACE_MEMCHR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  __attribute__ ((__pure__))
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if ! @HAVE_MEMCHR@
+_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  __attribute__ ((__pure__))
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { void * std::memchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+_GL_CXXALIASWARN1 (memchr, void const *,
+                   (void const *__s, int __c, size_t __n));
+# else
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! @HAVE_DECL_MEMMEM@
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if @GNULIB_MEMPCPY@
+# if ! @HAVE_MEMPCPY@
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+                        void *, (void const *, int, size_t),
+                        void const *, (void const *, int, size_t));
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+# else
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if @GNULIB_RAWMEMCHR@
+# if ! @HAVE_RAWMEMCHR@
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     __attribute__ ((__pure__))
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::rawmemchr (const void *, int); }
+       extern "C++" { void * std::rawmemchr (void *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+                        void *, (void const *__s, int __c_in),
+                        void const *, (void const *__s, int __c_in));
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
+_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if @GNULIB_STPCPY@
+# if ! @HAVE_STPCPY@
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if @GNULIB_STPNCPY@
+# if @REPLACE_STPNCPY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+#  if ! @HAVE_STPNCPY@
+_GL_FUNCDECL_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if @GNULIB_STRCHRNUL@
+# if ! @HAVE_STRCHRNUL@
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     __attribute__ ((__pure__))
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * std::strchrnul (const char *, int); }
+       extern "C++" { char * std::strchrnul (char *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+                        char *, (char const *__s, int __c_in),
+                        char const *, (char const *__s, int __c_in));
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
+_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_STRDUP@
+# if @REPLACE_STRDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if !(@HAVE_DECL_STRDUP@ || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST.  */
+#if @GNULIB_STRNCAT@
+# if @REPLACE_STRNCAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strncat
+#   define strncat rpl_strncat
+#  endif
+_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
+# endif
+_GL_CXXALIASWARN (strncat);
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+                 "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if @GNULIB_STRNDUP@
+# if @REPLACE_STRNDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__string, size_t __n));
+# else
+#  if ! @HAVE_DECL_STRNDUP@
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__string, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__string, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if @GNULIB_STRNLEN@
+# if @REPLACE_STRNLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strnlen
+#   define strnlen rpl_strnlen
+#  endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__string, size_t __maxlen));
+# else
+#  if ! @HAVE_DECL_STRNLEN@
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__string, size_t __maxlen)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__string, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   __attribute__ ((__pure__))
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { char * strpbrk (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+                   (char const *__s, char const *__accept));
+# else
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if @GNULIB_STRSEP@
+# if ! @HAVE_STRSEP@
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  __attribute__ ((__pure__))
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strstr (const char *, const char *); }
+       extern "C++" { char * strstr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strstr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! @HAVE_STRCASESTR@
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  __attribute__ ((__pure__)) _GL_ARG_NONNULL ((1, 2)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strcasestr (const char *, const char *); }
+       extern "C++" { char * strcasestr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if __GLIBC__ == 2 && __GLIBC_MINOR__ >= 10 \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if @GNULIB_STRTOK_R@
+# if @REPLACE_STRTOK_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! @HAVE_DECL_STRTOK_R@
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if @GNULIB_MBSLEN@
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if @GNULIB_MBSCHR@
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if @GNULIB_MBSRCHR@
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if @GNULIB_MBSSTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASECMP@
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+   equal to or greater than zero if S1 is lexicographically less than, equal to
+   or greater than S2.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSNCASECMP@
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPCASECMP@
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case, returning less than, equal to or greater than zero if this
+   initial segment is lexicographically less than, equal to or greater than
+   PREFIX.
+   Note: This function may, in multibyte locales, return 0 if STRING is of
+   smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASESTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCSPN@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPBRK@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if @GNULIB_MBSSPN@
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSSEP@
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSTOK_R@
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! @HAVE_DECL_STRSIGNAL@
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if @GNULIB_STRVERSCMP@
+# if !@HAVE_STRVERSCMP@
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _GL_STRING_H */
+#endif /* _GL_STRING_H */
diff --git a/lib/gllib/strverscmp.c b/lib/gllib/strverscmp.c
new file mode 100644 (file)
index 0000000..5757d64
--- /dev/null
@@ -0,0 +1,132 @@
+/* Compare strings while treating digits characters numerically.
+   Copyright (C) 1997, 2000, 2002, 2004, 2006, 2009-2010 Free Software
+   Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License along
+   with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#if !_LIBC
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <ctype.h>
+
+/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
+           fractional parts, S_Z: idem but with leading Zeroes only */
+#define S_N    0x0
+#define S_I    0x4
+#define S_F    0x8
+#define S_Z    0xC
+
+/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
+#define CMP    2
+#define LEN    3
+
+
+/* ISDIGIT differs from isdigit, as follows:
+   - Its arg may be any int or unsigned int; it need not be an unsigned char
+     or EOF.
+   - It's typically faster.
+   POSIX says that only '0' through '9' are digits.  Prefer ISDIGIT to
+   isdigit unless it's important to use the locale's definition
+   of `digit' even when the host does not conform to POSIX.  */
+#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
+
+#undef __strverscmp
+#undef strverscmp
+
+#ifndef weak_alias
+# define __strverscmp strverscmp
+#endif
+
+/* Compare S1 and S2 as strings holding indices/version numbers,
+   returning less than, equal to or greater than zero if S1 is less than,
+   equal to or greater than S2 (for more info, see the texinfo doc).
+*/
+
+int
+__strverscmp (const char *s1, const char *s2)
+{
+  const unsigned char *p1 = (const unsigned char *) s1;
+  const unsigned char *p2 = (const unsigned char *) s2;
+  unsigned char c1, c2;
+  int state;
+  int diff;
+
+  /* Symbol(s)    0       [1-9]   others  (padding)
+     Transition   (10) 0  (01) d  (00) x  (11) -   */
+  static const unsigned int next_state[] =
+  {
+      /* state    x    d    0    - */
+      /* S_N */  S_N, S_I, S_Z, S_N,
+      /* S_I */  S_N, S_I, S_I, S_I,
+      /* S_F */  S_N, S_F, S_F, S_F,
+      /* S_Z */  S_N, S_F, S_Z, S_Z
+  };
+
+  static const int result_type[] =
+  {
+      /* state   x/x  x/d  x/0  x/-  d/x  d/d  d/0  d/-
+                 0/x  0/d  0/0  0/-  -/x  -/d  -/0  -/- */
+
+      /* S_N */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
+                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_I */  CMP, -1,  -1,  CMP,  1,  LEN, LEN, CMP,
+                  1,  LEN, LEN, CMP, CMP, CMP, CMP, CMP,
+      /* S_F */  CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
+                 CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
+      /* S_Z */  CMP,  1,   1,  CMP, -1,  CMP, CMP, CMP,
+                 -1,  CMP, CMP, CMP
+  };
+
+  if (p1 == p2)
+    return 0;
+
+  c1 = *p1++;
+  c2 = *p2++;
+  /* Hint: '0' is a digit too.  */
+  state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0));
+
+  while ((diff = c1 - c2) == 0 && c1 != '\0')
+    {
+      state = next_state[state];
+      c1 = *p1++;
+      c2 = *p2++;
+      state |= (c1 == '0') + (ISDIGIT (c1) != 0);
+    }
+
+  state = result_type[state << 2 | ((c2 == '0') + (ISDIGIT (c2) != 0))];
+
+  switch (state)
+    {
+    case CMP:
+      return diff;
+
+    case LEN:
+      while (ISDIGIT (*p1++))
+        if (!ISDIGIT (*p2++))
+          return 1;
+
+      return ISDIGIT (*p2) ? -1 : diff;
+
+    default:
+      return state;
+    }
+}
+#ifdef weak_alias
+weak_alias (__strverscmp, strverscmp)
+#endif
diff --git a/lib/gllib/wchar.in.h b/lib/gllib/wchar.in.h
new file mode 100644 (file)
index 0000000..ed582e5
--- /dev/null
@@ -0,0 +1,428 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2010 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as published by
+   the Free Software Foundation; either version 2.1, 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 Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+
+#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
+/* Special invocation convention:
+   - Inside glibc and uClibc header files.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _GL_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   But avoid namespace pollution on glibc systems.  */
+#ifndef __GLIBC__
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _GL_WCHAR_H
+#define _GL_WCHAR_H
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+typedef int rpl_mbstate_t;
+# undef mbstate_t
+# define mbstate_t rpl_mbstate_t
+# define GNULIB_defined_mbstate_t 1
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c));
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c));
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc));
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc));
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSNRTOMBS@
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t));
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t));
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+#endif /* _GL_WCHAR_H */
+#endif /* _GL_WCHAR_H */
+#endif
diff --git a/lib/glm4/gnulib-comp.m4 b/lib/glm4/gnulib-comp.m4
new file mode 100644 (file)
index 0000000..7366c7d
--- /dev/null
@@ -0,0 +1,242 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2010 Free Software Foundation, Inc.
+#
+# This file is free software, distributed under the terms of the GNU
+# General Public License.  As a special exception to the GNU General
+# Public License, this file may be distributed as part of a program
+# that contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the compiled summary of the specification in
+# gnulib-cache.m4. It lists the computed macro invocations that need
+# to be invoked from configure.ac.
+# In projects using CVS, this file can be treated like other built files.
+
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Checks for programs", right after AC_PROG_CC, and certainly before
+# any checks for libraries, header files, types and library functions.
+AC_DEFUN([lgl_EARLY],
+[
+  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
+  m4_pattern_allow([^gl_ES$])dnl a valid locale name
+  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+  AC_REQUIRE([AC_PROG_RANLIB])
+  # Code from module arg-nonnull:
+  # Code from module c++defs:
+  # Code from module extensions:
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  # Code from module include_next:
+  # Code from module lib-symbol-versions:
+  # Code from module lib-symbol-visibility:
+  # Code from module multiarch:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module string:
+  # Code from module strverscmp:
+  # Code from module warn-on-use:
+  # Code from module wchar:
+])
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Check for header files, types and library functions".
+AC_DEFUN([lgl_INIT],
+[
+  AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
+  gl_cond_libtool=true
+  gl_m4_base='lib/glm4'
+  m4_pushdef([AC_LIBOBJ], m4_defn([lgl_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([lgl_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([lgl_LIBSOURCES]))
+  m4_pushdef([lgl_LIBSOURCES_LIST], [])
+  m4_pushdef([lgl_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='lib/gllib'
+  # Code from module arg-nonnull:
+  # Code from module c++defs:
+  # Code from module extensions:
+  # Code from module include_next:
+  # Code from module lib-symbol-versions:
+  gl_LD_VERSION_SCRIPT
+  # Code from module lib-symbol-visibility:
+  gl_VISIBILITY
+  # Code from module multiarch:
+  gl_MULTIARCH
+  # Code from module stddef:
+  gl_STDDEF_H
+  # Code from module stdint:
+  gl_STDINT_H
+  # Code from module string:
+  gl_HEADER_STRING_H
+  # Code from module strverscmp:
+  gl_FUNC_STRVERSCMP
+  gl_STRING_MODULE_INDICATOR([strverscmp])
+  # Code from module warn-on-use:
+  # Code from module wchar:
+  gl_WCHAR_H
+  # Code from module dummy:
+  # End of code from modules
+  m4_ifval(lgl_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([lgl_LIBSOURCES_DIR])[ ||
+      for gl_file in ]lgl_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([lgl_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([lgl_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([lgl_LIBSOURCES_DIR])
+  m4_popdef([lgl_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    lgl_libobjs=
+    lgl_ltlibobjs=
+    if test -n "$lgl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $lgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        lgl_libobjs="$lgl_libobjs $i.$ac_objext"
+        lgl_ltlibobjs="$lgl_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([lgl_LIBOBJS], [$lgl_libobjs])
+    AC_SUBST([lgl_LTLIBOBJS], [$lgl_ltlibobjs])
+  ])
+  gltests_libdeps=
+  gltests_ltlibdeps=
+  m4_pushdef([AC_LIBOBJ], m4_defn([lgltests_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([lgltests_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([lgltests_LIBSOURCES]))
+  m4_pushdef([lgltests_LIBSOURCES_LIST], [])
+  m4_pushdef([lgltests_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='tests'
+changequote(,)dnl
+  lgltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+changequote([, ])dnl
+  AC_SUBST([lgltests_WITNESS])
+  gl_module_indicator_condition=$lgltests_WITNESS
+  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
+  m4_ifval(lgltests_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([lgltests_LIBSOURCES_DIR])[ ||
+      for gl_file in ]lgltests_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([lgltests_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([lgltests_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([lgltests_LIBSOURCES_DIR])
+  m4_popdef([lgltests_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    lgltests_libobjs=
+    lgltests_ltlibobjs=
+    if test -n "$lgltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $lgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        lgltests_libobjs="$lgltests_libobjs $i.$ac_objext"
+        lgltests_ltlibobjs="$lgltests_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([lgltests_LIBOBJS], [$lgltests_libobjs])
+    AC_SUBST([lgltests_LTLIBOBJS], [$lgltests_ltlibobjs])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into lgl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([lgl_LIBOBJ], [
+  AS_LITERAL_IF([$1], [lgl_LIBSOURCES([$1.c])])dnl
+  lgl_LIBOBJS="$lgl_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into lgl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([lgl_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [lgl_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([lgl_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([lgl_LIBSOURCES_DIR], [lib/gllib])
+      m4_append([lgl_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into lgltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([lgltests_LIBOBJ], [
+  AS_LITERAL_IF([$1], [lgltests_LIBSOURCES([$1.c])])dnl
+  lgltests_LIBOBJS="$lgltests_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into lgltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([lgltests_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [lgltests_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([lgltests_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([lgltests_LIBSOURCES_DIR], [tests])
+      m4_append([lgltests_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# This macro records the list of files which have been installed by
+# gnulib-tool and may be removed by future gnulib-tool invocations.
+AC_DEFUN([lgl_FILE_LIST], [
+  build-aux/arg-nonnull.h
+  build-aux/c++defs.h
+  build-aux/warn-on-use.h
+  lib/dummy.c
+  lib/stddef.in.h
+  lib/stdint.in.h
+  lib/string.in.h
+  lib/strverscmp.c
+  lib/wchar.in.h
+  m4/00gnulib.m4
+  m4/extensions.m4
+  m4/gnulib-common.m4
+  m4/include_next.m4
+  m4/ld-version-script.m4
+  m4/longlong.m4
+  m4/multiarch.m4
+  m4/stddef_h.m4
+  m4/stdint.m4
+  m4/string_h.m4
+  m4/strverscmp.m4
+  m4/visibility.m4
+  m4/warn-on-use.m4
+  m4/wchar_h.m4
+  m4/wchar_t.m4
+  m4/wint_t.m4
+])
diff --git a/lib/glm4/ld-version-script.m4 b/lib/glm4/ld-version-script.m4
new file mode 100644 (file)
index 0000000..43c1ef1
--- /dev/null
@@ -0,0 +1,44 @@
+# ld-version-script.m4 serial 1
+dnl Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# FIXME: The test below returns a false positive for mingw
+# cross-compiles, 'local:' statements does not reduce number of
+# exported symbols in a DLL.  Use --disable-ld-version-script to work
+# around the problem.
+
+# gl_LD_VERSION_SCRIPT
+# --------------------
+# Check if LD supports linker scripts, and define automake conditional
+# HAVE_LD_VERSION_SCRIPT if so.
+AC_DEFUN([gl_LD_VERSION_SCRIPT],
+[
+  AC_ARG_ENABLE([ld-version-script],
+    AS_HELP_STRING([--enable-ld-version-script],
+      [enable linker version script (default is enabled when possible)]),
+      [have_ld_version_script=$enableval], [])
+  if test -z "$have_ld_version_script"; then
+    AC_MSG_CHECKING([if LD -Wl,--version-script works])
+    save_LDFLAGS="$LDFLAGS"
+    LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
+    cat > conftest.map <<EOF
+VERS_1 {
+        global: sym;
+};
+
+VERS_2 {
+        global: sym;
+} VERS_1;
+EOF
+    AC_LINK_IFELSE(AC_LANG_PROGRAM([], []),
+                   [have_ld_version_script=yes], [have_ld_version_script=no])
+    rm -f conftest.map
+    LDFLAGS="$save_LDFLAGS"
+    AC_MSG_RESULT($have_ld_version_script)
+  fi
+  AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
+])
diff --git a/lib/glm4/string_h.m4 b/lib/glm4/string_h.m4
new file mode 100644 (file)
index 0000000..1977aec
--- /dev/null
@@ -0,0 +1,112 @@
+# Configure a GNU-like replacement for <string.h>.
+
+# Copyright (C) 2007-2010 Free Software Foundation, Inc.
+# This file 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.
+
+# serial 17
+
+# Written by Paul Eggert.
+
+AC_DEFUN([gl_HEADER_STRING_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_HEADER_STRING_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_BODY],
+[
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([string.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <string.h>
+    ]],
+    [memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup
+     strncat strndup strnlen strpbrk strsep strcasestr strtok_r strsignal
+     strverscmp])
+])
+
+AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+[
+  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
+  GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
+  GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
+  GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
+  GNULIB_RAWMEMCHR=0;   AC_SUBST([GNULIB_RAWMEMCHR])
+  GNULIB_STPCPY=0;      AC_SUBST([GNULIB_STPCPY])
+  GNULIB_STPNCPY=0;     AC_SUBST([GNULIB_STPNCPY])
+  GNULIB_STRCHRNUL=0;   AC_SUBST([GNULIB_STRCHRNUL])
+  GNULIB_STRDUP=0;      AC_SUBST([GNULIB_STRDUP])
+  GNULIB_STRNCAT=0;     AC_SUBST([GNULIB_STRNCAT])
+  GNULIB_STRNDUP=0;     AC_SUBST([GNULIB_STRNDUP])
+  GNULIB_STRNLEN=0;     AC_SUBST([GNULIB_STRNLEN])
+  GNULIB_STRPBRK=0;     AC_SUBST([GNULIB_STRPBRK])
+  GNULIB_STRSEP=0;      AC_SUBST([GNULIB_STRSEP])
+  GNULIB_STRSTR=0;      AC_SUBST([GNULIB_STRSTR])
+  GNULIB_STRCASESTR=0;  AC_SUBST([GNULIB_STRCASESTR])
+  GNULIB_STRTOK_R=0;    AC_SUBST([GNULIB_STRTOK_R])
+  GNULIB_MBSLEN=0;      AC_SUBST([GNULIB_MBSLEN])
+  GNULIB_MBSNLEN=0;     AC_SUBST([GNULIB_MBSNLEN])
+  GNULIB_MBSCHR=0;      AC_SUBST([GNULIB_MBSCHR])
+  GNULIB_MBSRCHR=0;     AC_SUBST([GNULIB_MBSRCHR])
+  GNULIB_MBSSTR=0;      AC_SUBST([GNULIB_MBSSTR])
+  GNULIB_MBSCASECMP=0;  AC_SUBST([GNULIB_MBSCASECMP])
+  GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
+  GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
+  GNULIB_MBSCASESTR=0;  AC_SUBST([GNULIB_MBSCASESTR])
+  GNULIB_MBSCSPN=0;     AC_SUBST([GNULIB_MBSCSPN])
+  GNULIB_MBSPBRK=0;     AC_SUBST([GNULIB_MBSPBRK])
+  GNULIB_MBSSPN=0;      AC_SUBST([GNULIB_MBSSPN])
+  GNULIB_MBSSEP=0;      AC_SUBST([GNULIB_MBSSEP])
+  GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
+  GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
+  GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
+  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
+  HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
+  HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
+  HAVE_DECL_MEMRCHR=1;          AC_SUBST([HAVE_DECL_MEMRCHR])
+  HAVE_RAWMEMCHR=1;             AC_SUBST([HAVE_RAWMEMCHR])
+  HAVE_STPCPY=1;                AC_SUBST([HAVE_STPCPY])
+  HAVE_STPNCPY=1;               AC_SUBST([HAVE_STPNCPY])
+  HAVE_STRCHRNUL=1;             AC_SUBST([HAVE_STRCHRNUL])
+  HAVE_DECL_STRDUP=1;           AC_SUBST([HAVE_DECL_STRDUP])
+  HAVE_DECL_STRNDUP=1;          AC_SUBST([HAVE_DECL_STRNDUP])
+  HAVE_DECL_STRNLEN=1;          AC_SUBST([HAVE_DECL_STRNLEN])
+  HAVE_STRPBRK=1;               AC_SUBST([HAVE_STRPBRK])
+  HAVE_STRSEP=1;                AC_SUBST([HAVE_STRSEP])
+  HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
+  HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
+  HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
+  HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
+  REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
+  REPLACE_MEMMEM=0;             AC_SUBST([REPLACE_MEMMEM])
+  REPLACE_STPNCPY=0;            AC_SUBST([REPLACE_STPNCPY])
+  REPLACE_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
+  REPLACE_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
+  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
+  REPLACE_STRNCAT=0;            AC_SUBST([REPLACE_STRNCAT])
+  REPLACE_STRNDUP=0;            AC_SUBST([REPLACE_STRNDUP])
+  REPLACE_STRNLEN=0;            AC_SUBST([REPLACE_STRNLEN])
+  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
+  REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
+  UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
+])
diff --git a/lib/glm4/strverscmp.m4 b/lib/glm4/strverscmp.m4
new file mode 100644 (file)
index 0000000..59e0950
--- /dev/null
@@ -0,0 +1,23 @@
+# strverscmp.m4 serial 7
+dnl Copyright (C) 2002, 2005-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_STRVERSCMP],
+[
+  dnl Persuade glibc <string.h> to declare strverscmp().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_REPLACE_FUNCS([strverscmp])
+  if test $ac_cv_func_strverscmp = no; then
+    gl_PREREQ_STRVERSCMP
+    HAVE_STRVERSCMP=0
+  fi
+])
+
+# Prerequisites of lib/strverscmp.c.
+AC_DEFUN([gl_PREREQ_STRVERSCMP], [
+  :
+])
diff --git a/lib/glm4/visibility.m4 b/lib/glm4/visibility.m4
new file mode 100644 (file)
index 0000000..077c476
--- /dev/null
@@ -0,0 +1,74 @@
+# visibility.m4 serial 3 (gettext-0.18)
+dnl Copyright (C) 2005, 2008-2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl MacOS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAG_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+AC_DEFUN([gl_VISIBILITY],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+    dnl First, check whether -Werror can be added to the command line, or
+    dnl whether it leads to an error because of some other option that the
+    dnl user has put into $CC $CFLAGS $CPPFLAGS.
+    AC_MSG_CHECKING([whether the -Werror option is usable])
+    AC_CACHE_VAL([gl_cv_cc_vis_werror], [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -Werror"
+      AC_TRY_COMPILE([], [],
+        [gl_cv_cc_vis_werror=yes],
+        [gl_cv_cc_vis_werror=no])
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_vis_werror])
+    dnl Now check whether visibility declarations are supported.
+    AC_MSG_CHECKING([for simple visibility declarations])
+    AC_CACHE_VAL([gl_cv_cc_visibility], [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+      dnl We use the option -Werror and a function dummyfunc, because on some
+      dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning
+      dnl "visibility attribute not supported in this configuration; ignored"
+      dnl at the first function definition in every compilation unit, and we
+      dnl don't want to use the option in this case.
+      if test $gl_cv_cc_vis_werror = yes; then
+        CFLAGS="$CFLAGS -Werror"
+      fi
+      AC_TRY_COMPILE(
+        [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+         extern __attribute__((__visibility__("default"))) int exportedvar;
+         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+         extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+         void dummyfunc (void) {}],
+        [],
+        [gl_cv_cc_visibility=yes],
+        [gl_cv_cc_visibility=no])
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_visibility])
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+  AC_SUBST([CFLAG_VISIBILITY])
+  AC_SUBST([HAVE_VISIBILITY])
+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
+])
diff --git a/lib/gstr.c b/lib/gstr.c
new file mode 100644 (file)
index 0000000..b3f6af2
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Free Software
+ * Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#include <int.h>
+#include "gstr.h"
+
+/* These function are like strcat, strcpy. They only
+ * do bounds checking (they shouldn't cause buffer overruns),
+ * and they always produce null terminated strings.
+ *
+ * They should be used only with null terminated strings.
+ */
+void
+_asn1_str_cat (char *dest, size_t dest_tot_size, const char *src)
+{
+  size_t str_size = strlen (src);
+  size_t dest_size = strlen (dest);
+
+  if (dest_tot_size - dest_size > str_size)
+    {
+      strcat (dest, src);
+    }
+  else
+    {
+      if (dest_tot_size - dest_size > 0)
+       {
+         strncat (dest, src, (dest_tot_size - dest_size) - 1);
+         dest[dest_tot_size - 1] = 0;
+       }
+    }
+}
+
+void
+_asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src)
+{
+  size_t str_size = strlen (src);
+
+  if (dest_tot_size > str_size)
+    {
+      strcpy (dest, src);
+    }
+  else
+    {
+      if (dest_tot_size > 0)
+       {
+         strncpy (dest, src, (dest_tot_size) - 1);
+         dest[dest_tot_size - 1] = 0;
+       }
+    }
+}
diff --git a/lib/gstr.h b/lib/gstr.h
new file mode 100644 (file)
index 0000000..bffb912
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Free Software
+ * Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+void _asn1_str_cpy (char *dest, size_t dest_tot_size, const char *src);
+void _asn1_str_cat (char *dest, size_t dest_tot_size, const char *src);
+
+#define Estrcpy(x,y) _asn1_str_cpy(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y)
+#define Estrcat(x,y) _asn1_str_cat(x,ASN1_MAX_ERROR_DESCRIPTION_SIZE,y)
diff --git a/lib/int.h b/lib/int.h
new file mode 100644 (file)
index 0000000..def4927
--- /dev/null
+++ b/lib/int.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#ifndef INT_H
+#define INT_H
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <stdint.h>
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#include <libtasn1.h>
+
+#define ASN1_SMALL_VALUE_SIZE 16
+
+/* This structure is also in libtasn1.h, but then contains less
+   fields.  You cannot make any modifications to these first fields
+   without breaking ABI.  */
+struct node_asn_struct
+{
+  /* public fields: */
+  char *name;                  /* Node name */
+  unsigned int type;           /* Node type */
+  unsigned char *value;                /* Node value */
+  int value_len;
+  ASN1_TYPE down;              /* Pointer to the son node */
+  ASN1_TYPE right;             /* Pointer to the brother node */
+  ASN1_TYPE left;              /* Pointer to the next list element */
+  /* private fields: */
+  unsigned char small_value[ASN1_SMALL_VALUE_SIZE];    /* For small values */
+};
+
+#define _asn1_malloc malloc
+#define _asn1_free free
+#define _asn1_calloc calloc
+#define _asn1_realloc realloc
+#define _asn1_strdup strdup
+
+#define MAX_LOG_SIZE 1024      /* maximum number of characters of a log message */
+
+/* Define used for visiting trees. */
+#define UP     1
+#define RIGHT  2
+#define DOWN   3
+
+/****************************************/
+/* Returns the first 8 bits.            */
+/* Used with the field type of node_asn */
+/****************************************/
+#define type_field(x)     (x&0xFF)
+
+/* List of constants for field type of typedef node_asn  */
+#define TYPE_CONSTANT       1
+#define TYPE_IDENTIFIER     2
+#define TYPE_INTEGER        3
+#define TYPE_BOOLEAN        4
+#define TYPE_SEQUENCE       5
+#define TYPE_BIT_STRING     6
+#define TYPE_OCTET_STRING   7
+#define TYPE_TAG            8
+#define TYPE_DEFAULT        9
+#define TYPE_SIZE          10
+#define TYPE_SEQUENCE_OF   11
+#define TYPE_OBJECT_ID     12
+#define TYPE_ANY           13
+#define TYPE_SET           14
+#define TYPE_SET_OF        15
+#define TYPE_DEFINITIONS   16
+#define TYPE_TIME          17
+#define TYPE_CHOICE        18
+#define TYPE_IMPORTS       19
+#define TYPE_NULL          20
+#define TYPE_ENUMERATED    21
+#define TYPE_GENERALSTRING 27
+
+
+/***********************************************************************/
+/* List of constants to better specify the type of typedef node_asn.   */
+/***********************************************************************/
+/*  Used with TYPE_TAG  */
+#define CONST_UNIVERSAL   (1<<8)
+#define CONST_PRIVATE     (1<<9)
+#define CONST_APPLICATION (1<<10)
+#define CONST_EXPLICIT    (1<<11)
+#define CONST_IMPLICIT    (1<<12)
+
+#define CONST_TAG         (1<<13)      /*  Used in ASN.1 assignement  */
+#define CONST_OPTION      (1<<14)
+#define CONST_DEFAULT     (1<<15)
+#define CONST_TRUE        (1<<16)
+#define CONST_FALSE       (1<<17)
+
+#define CONST_LIST        (1<<18)      /*  Used with TYPE_INTEGER and TYPE_BIT_STRING  */
+#define CONST_MIN_MAX     (1<<19)
+
+#define CONST_1_PARAM     (1<<20)
+
+#define CONST_SIZE        (1<<21)
+
+#define CONST_DEFINED_BY  (1<<22)
+
+#define CONST_GENERALIZED (1<<23)
+#define CONST_UTC         (1<<24)
+
+/* #define CONST_IMPORTS     (1<<25) */
+
+#define CONST_NOT_USED    (1<<26)
+#define CONST_SET         (1<<27)
+#define CONST_ASSIGN      (1<<28)
+
+#define CONST_DOWN        (1<<29)
+#define CONST_RIGHT       (1<<30)
+
+#endif /* INT_H */
diff --git a/lib/libtasn1.h b/lib/libtasn1.h
new file mode 100644 (file)
index 0000000..f295a22
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * LIBTASN1 is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * LIBTASN1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with LIBTASN1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ *
+ */
+
+#ifndef LIBTASN1_H
+# define LIBTASN1_H
+
+# ifndef ASN1_API
+#  if defined ASN1_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY
+#   define ASN1_API __attribute__((__visibility__("default")))
+#  elif defined ASN1_BUILDING && defined _MSC_VER && ! defined ASN1_STATIC
+#   define ASN1_API __declspec(dllexport)
+#  elif defined _MSC_VER && ! defined ASN1_STATIC
+#   define ASN1_API __declspec(dllimport)
+#  else
+#   define ASN1_API
+#  endif
+# endif
+
+#include <stdio.h>             /* for FILE* */
+#include <sys/types.h>
+#include <time.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define ASN1_VERSION "2.7"
+
+  typedef int asn1_retCode;    /* type returned by libtasn1 functions */
+
+  /*****************************************/
+  /* Errors returned by libtasn1 functions */
+  /*****************************************/
+#define ASN1_SUCCESS                   0
+#define ASN1_FILE_NOT_FOUND            1
+#define ASN1_ELEMENT_NOT_FOUND         2
+#define ASN1_IDENTIFIER_NOT_FOUND      3
+#define ASN1_DER_ERROR                 4
+#define ASN1_VALUE_NOT_FOUND           5
+#define ASN1_GENERIC_ERROR             6
+#define ASN1_VALUE_NOT_VALID           7
+#define ASN1_TAG_ERROR                 8
+#define ASN1_TAG_IMPLICIT              9
+#define ASN1_ERROR_TYPE_ANY            10
+#define ASN1_SYNTAX_ERROR              11
+#define ASN1_MEM_ERROR                 12
+#define ASN1_MEM_ALLOC_ERROR           13
+#define ASN1_DER_OVERFLOW              14
+#define ASN1_NAME_TOO_LONG             15
+#define ASN1_ARRAY_ERROR               16
+#define ASN1_ELEMENT_NOT_EMPTY         17
+
+  /*************************************/
+  /* Constants used in asn1_visit_tree */
+  /*************************************/
+#define ASN1_PRINT_NAME                        1
+#define ASN1_PRINT_NAME_TYPE           2
+#define ASN1_PRINT_NAME_TYPE_VALUE     3
+#define ASN1_PRINT_ALL                 4
+
+  /*****************************************/
+  /* Constants returned by asn1_read_tag   */
+  /*****************************************/
+#define ASN1_CLASS_UNIVERSAL           0x00    /* old: 1 */
+#define ASN1_CLASS_APPLICATION         0x40    /* old: 2 */
+#define ASN1_CLASS_CONTEXT_SPECIFIC    0x80    /* old: 3 */
+#define ASN1_CLASS_PRIVATE             0xC0    /* old: 4 */
+#define ASN1_CLASS_STRUCTURED          0x20
+
+  /*****************************************/
+  /* Constants returned by asn1_read_tag   */
+  /*****************************************/
+#define ASN1_TAG_BOOLEAN               0x01
+#define ASN1_TAG_INTEGER               0x02
+#define ASN1_TAG_SEQUENCE              0x10
+#define ASN1_TAG_SET                   0x11
+#define ASN1_TAG_OCTET_STRING          0x04
+#define ASN1_TAG_BIT_STRING            0x03
+#define ASN1_TAG_UTCTime               0x17
+#define ASN1_TAG_GENERALIZEDTime       0x18
+#define ASN1_TAG_OBJECT_ID             0x06
+#define ASN1_TAG_ENUMERATED            0x0A
+#define ASN1_TAG_NULL                  0x05
+#define ASN1_TAG_GENERALSTRING         0x1B
+
+  /******************************************************/
+  /* Structure definition used for the node of the tree */
+  /* that represent an ASN.1 DEFINITION.                */
+  /******************************************************/
+
+#if !defined ASN1_BUILDING
+  /* This structure is also in internal.h, but then contains more
+     fields.  You cannot make any modifications to these fields
+     without breaking ABI.  */
+  struct node_asn_struct
+  {
+    char *name;                        /* Node name */
+    unsigned int type;         /* Node type */
+    unsigned char *value;      /* Node value */
+    int value_len;
+    struct node_asn_struct *down;      /* Pointer to the son node */
+    struct node_asn_struct *right;     /* Pointer to the brother node */
+    struct node_asn_struct *left;      /* Pointer to the next list element */
+  };
+#endif
+
+  typedef struct node_asn_struct node_asn;
+
+  typedef node_asn *ASN1_TYPE;
+
+#define ASN1_TYPE_EMPTY  NULL
+
+  /*****************************************/
+  /* For the on-disk format of ASN.1 trees */
+  /*****************************************/
+  struct static_struct_asn
+  {
+    const char *name;          /* Node name */
+    unsigned int type;         /* Node type */
+    const void *value;         /* Node value */
+  };
+  typedef struct static_struct_asn ASN1_ARRAY_TYPE;
+
+  /***********************************/
+  /*  Fixed constants                */
+  /***********************************/
+
+  /* maximum number of characters of a name */
+  /* inside a file with ASN1 definitons     */
+#define ASN1_MAX_NAME_SIZE 128
+
+  /* maximum number of characters */
+  /* of a description message     */
+  /* (null character included)    */
+#define ASN1_MAX_ERROR_DESCRIPTION_SIZE 128
+
+  /***********************************/
+  /*  Functions definitions          */
+  /***********************************/
+
+  extern ASN1_API asn1_retCode
+    asn1_parser2tree (const char *file_name,
+                     ASN1_TYPE * definitions, char *errorDescription);
+
+  extern ASN1_API asn1_retCode
+    asn1_parser2array (const char *inputFileName,
+                      const char *outputFileName,
+                      const char *vectorName, char *errorDescription);
+
+  extern ASN1_API asn1_retCode
+    asn1_array2tree (const ASN1_ARRAY_TYPE * array,
+                    ASN1_TYPE * definitions, char *errorDescription);
+
+  extern ASN1_API void
+    asn1_print_structure (FILE * out, ASN1_TYPE structure,
+                         const char *name, int mode);
+
+  extern ASN1_API asn1_retCode
+    asn1_create_element (ASN1_TYPE definitions,
+                        const char *source_name, ASN1_TYPE * element);
+
+  extern ASN1_API asn1_retCode asn1_delete_structure (ASN1_TYPE * structure);
+
+  extern ASN1_API asn1_retCode
+    asn1_delete_element (ASN1_TYPE structure, const char *element_name);
+
+  extern ASN1_API asn1_retCode
+    asn1_write_value (ASN1_TYPE node_root, const char *name,
+                     const void *ivalue, int len);
+
+  extern ASN1_API asn1_retCode
+    asn1_read_value (ASN1_TYPE root, const char *name,
+                    void *ivalue, int *len);
+
+  extern ASN1_API asn1_retCode
+    asn1_number_of_elements (ASN1_TYPE element, const char *name, int *num);
+
+  extern ASN1_API asn1_retCode
+    asn1_der_coding (ASN1_TYPE element, const char *name,
+                    void *ider, int *len, char *ErrorDescription);
+
+  extern ASN1_API asn1_retCode
+    asn1_der_decoding (ASN1_TYPE * element, const void *ider,
+                      int len, char *errorDescription);
+
+  extern ASN1_API asn1_retCode
+    asn1_der_decoding_element (ASN1_TYPE * structure,
+                              const char *elementName,
+                              const void *ider, int len,
+                              char *errorDescription);
+
+  extern ASN1_API asn1_retCode
+    asn1_der_decoding_startEnd (ASN1_TYPE element,
+                               const void *ider, int len,
+                               const char *name_element,
+                               int *start, int *end);
+
+  extern ASN1_API asn1_retCode
+    asn1_expand_any_defined_by (ASN1_TYPE definitions, ASN1_TYPE * element);
+
+  extern ASN1_API asn1_retCode
+    asn1_expand_octet_string (ASN1_TYPE definitions,
+                             ASN1_TYPE * element,
+                             const char *octetName, const char *objectName);
+
+  extern ASN1_API asn1_retCode
+    asn1_read_tag (ASN1_TYPE root, const char *name,
+                  int *tagValue, int *classValue);
+
+  extern ASN1_API const char *asn1_find_structure_from_oid (ASN1_TYPE
+                                                           definitions,
+                                                           const char
+                                                           *oidValue);
+
+  extern ASN1_API const char *asn1_check_version (const char *req_version);
+
+  extern ASN1_API const char *asn1_strerror (asn1_retCode error);
+
+  extern ASN1_API void asn1_perror (asn1_retCode error);
+
+  /* DER utility functions. */
+
+  extern ASN1_API int
+    asn1_get_tag_der (const unsigned char *der, int der_len,
+                     unsigned char *cls, int *len, unsigned long *tag);
+
+  extern ASN1_API void
+    asn1_octet_der (const unsigned char *str, int str_len,
+                   unsigned char *der, int *der_len);
+
+  extern ASN1_API asn1_retCode
+    asn1_get_octet_der (const unsigned char *der, int der_len,
+                       int *ret_len, unsigned char *str,
+                       int str_size, int *str_len);
+
+  extern ASN1_API void asn1_bit_der (const unsigned char *str, int bit_len,
+                                    unsigned char *der, int *der_len);
+
+  extern ASN1_API asn1_retCode
+    asn1_get_bit_der (const unsigned char *der, int der_len,
+                     int *ret_len, unsigned char *str,
+                     int str_size, int *bit_len);
+
+  extern ASN1_API signed long
+    asn1_get_length_der (const unsigned char *der, int der_len, int *len);
+
+  extern ASN1_API signed long
+    asn1_get_length_ber (const unsigned char *ber, int ber_len, int *len);
+
+  extern ASN1_API void
+    asn1_length_der (unsigned long int len, unsigned char *ans, int *ans_len);
+
+  /* Other utility functions. */
+
+  extern ASN1_API ASN1_TYPE
+    asn1_find_node (ASN1_TYPE pointer, const char *name);
+
+  extern ASN1_API asn1_retCode
+    asn1_copy_node (ASN1_TYPE dst, const char *dst_name,
+                   ASN1_TYPE src, const char *src_name);
+
+  /* Deprecated stuff. */
+
+#ifndef ASN1_DISABLE_DEPRECATED
+
+#define LIBTASN1_VERSION ASN1_VERSION
+
+#ifndef MAX_NAME_SIZE
+# define MAX_NAME_SIZE ASN1_MAX_NAME_SIZE
+#endif
+
+#ifndef MAX_ERROR_DESCRIPTION_SIZE
+# define MAX_ERROR_DESCRIPTION_SIZE ASN1_MAX_ERROR_DESCRIPTION_SIZE
+#endif
+
+#ifndef __attribute__
+  /* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+#  define __attribute__(Spec)  /* empty */
+# endif
+#endif
+
+  /* Use asn1_strerror instead. */
+  extern ASN1_API const char *libtasn1_strerror (asn1_retCode error)
+    __attribute__ ((deprecated));
+
+  /* Use asn1_perror instead. */
+  extern ASN1_API void
+    libtasn1_perror (asn1_retCode error) __attribute__ ((deprecated));
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                         /* LIBTASN1_H */
diff --git a/lib/libtasn1.map b/lib/libtasn1.map
new file mode 100644 (file)
index 0000000..06d5048
--- /dev/null
@@ -0,0 +1,59 @@
+# Copyright (C) 2009, 2010 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/>.
+
+LIBTASN1_0_3
+{
+  global:
+    asn1_array2tree;
+    asn1_bit_der;
+    asn1_check_version;
+    asn1_copy_node;
+    asn1_create_element;
+    asn1_delete_element;
+    asn1_delete_structure;
+    asn1_der_coding;
+    asn1_der_decoding;
+    asn1_der_decoding_element;
+    asn1_der_decoding_startEnd;
+    asn1_expand_any_defined_by;
+    asn1_expand_octet_string;
+    asn1_find_node;
+    asn1_find_structure_from_oid;
+    asn1_get_bit_der;
+    asn1_get_length_ber;
+    asn1_get_length_der;
+    asn1_get_octet_der;
+    asn1_get_tag_der;
+    asn1_length_der;
+    asn1_number_of_elements;
+    asn1_octet_der;
+    asn1_parser2array;
+    asn1_parser2tree;
+    asn1_perror;
+    asn1_print_structure;
+    asn1_read_tag;
+    asn1_read_value;
+    asn1_strerror;
+    asn1_write_value;
+
+    # Old symbols
+    libtasn1_strerror;
+    libtasn1_perror;
+
+  local:
+    *;
+};
diff --git a/lib/libtasn1.pc.in b/lib/libtasn1.pc.in
new file mode 100644 (file)
index 0000000..d42f670
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+# This file is part of LIBTASN1.
+#
+# The LIBTASN1 library is free software; you can redistribute it
+# and/or modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libtasn1
+Description: Library for ASN.1 and DER manipulation
+URL: http://www.gnu.org/software/libtasn1/
+Version: @VERSION@
+Libs: -L${libdir} -ltasn1
+Cflags: -I${includedir}
diff --git a/lib/parser_aux.c b/lib/parser_aux.c
new file mode 100644 (file)
index 0000000..a3150a8
--- /dev/null
@@ -0,0 +1,1097 @@
+/*
+ * Copyright (C) 2000, 2001, 2004, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#include <int.h>
+#include "parser_aux.h"
+#include "gstr.h"
+#include "structure.h"
+#include "element.h"
+
+char _asn1_identifierMissing[ASN1_MAX_NAME_SIZE + 1];  /* identifier name not found */
+
+/***********************************************/
+/* Type: list_type                             */
+/* Description: type used in the list during   */
+/* the structure creation.                     */
+/***********************************************/
+typedef struct list_struct
+{
+  ASN1_TYPE node;
+  struct list_struct *next;
+} list_type;
+
+
+/* Pointer to the first element of the list */
+list_type *firstElement = NULL;
+
+/******************************************************/
+/* Function : _asn1_add_node                          */
+/* Description: creates a new NODE_ASN element and    */
+/* puts it in the list pointed by firstElement.       */
+/* Parameters:                                        */
+/*   type: type of the new element (see TYPE_         */
+/*         and CONST_ constants).                     */
+/* Return: pointer to the new element.                */
+/******************************************************/
+ASN1_TYPE
+_asn1_add_node (unsigned int type)
+{
+  list_type *listElement;
+  ASN1_TYPE punt;
+
+  punt = (ASN1_TYPE) _asn1_calloc (1, sizeof (struct node_asn_struct));
+  if (punt == NULL)
+    return NULL;
+
+  listElement = (list_type *) _asn1_malloc (sizeof (list_type));
+  if (listElement == NULL)
+    {
+      _asn1_free (punt);
+      return NULL;
+    }
+
+  listElement->node = punt;
+  listElement->next = firstElement;
+  firstElement = listElement;
+
+  punt->type = type;
+
+  return punt;
+}
+
+/**
+ * asn1_find_node:
+ * @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_TYPE
+asn1_find_node (ASN1_TYPE pointer, const char *name)
+{
+  ASN1_TYPE p;
+  char *n_end, n[ASN1_MAX_NAME_SIZE + 1];
+  const char *n_start;
+
+  if (pointer == NULL)
+    return NULL;
+
+  if (name == NULL)
+    return NULL;
+
+  p = pointer;
+  n_start = name;
+
+  if (p->name != NULL)
+    {                          /* has *pointer got a name ? */
+      n_end = strchr (n_start, '.');   /* search the first dot */
+      if (n_end)
+       {
+         memcpy (n, n_start, n_end - n_start);
+         n[n_end - n_start] = 0;
+         n_start = n_end;
+         n_start++;
+       }
+      else
+       {
+         _asn1_str_cpy (n, sizeof (n), n_start);
+         n_start = NULL;
+       }
+
+      while (p)
+       {
+         if ((p->name) && (!strcmp (p->name, n)))
+           break;
+         else
+           p = p->right;
+       }                       /* while */
+
+      if (p == NULL)
+       return NULL;
+    }
+  else
+    {                          /* *pointer doesn't have a name */
+      if (n_start[0] == 0)
+       return p;
+    }
+
+  while (n_start)
+    {                          /* Has the end of NAME been reached? */
+      n_end = strchr (n_start, '.');   /* search the next dot */
+      if (n_end)
+       {
+         memcpy (n, n_start, n_end - n_start);
+         n[n_end - n_start] = 0;
+         n_start = n_end;
+         n_start++;
+       }
+      else
+       {
+         _asn1_str_cpy (n, sizeof (n), n_start);
+         n_start = NULL;
+       }
+
+      if (p->down == NULL)
+       return NULL;
+
+      p = p->down;
+
+      /* The identifier "?LAST" indicates the last element
+         in the right chain. */
+      if (!strcmp (n, "?LAST"))
+       {
+         if (p == NULL)
+           return NULL;
+         while (p->right)
+           p = p->right;
+       }
+      else
+       {                       /* no "?LAST" */
+         while (p)
+           {
+             if ((p->name) && (!strcmp (p->name, n)))
+               break;
+             else
+               p = p->right;
+           }
+         if (p == NULL)
+           return NULL;
+       }
+    }                          /* while */
+
+  return p;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_set_value                                     */
+/* Description: sets the field VALUE in a NODE_ASN element. The   */
+/*              previous value (if exist) will be lost            */
+/* Parameters:                                                    */
+/*   node: element pointer.                                       */
+/*   value: pointer to the value that you want to set.            */
+/*   len: character number of value.                              */
+/* Return: pointer to the NODE_ASN element.                       */
+/******************************************************************/
+ASN1_TYPE
+_asn1_set_value (ASN1_TYPE node, const void *value, unsigned int len)
+{
+  if (node == NULL)
+    return node;
+  if (node->value)
+    {
+      if (node->value != node->small_value)
+       _asn1_free (node->value);
+      node->value = NULL;
+      node->value_len = 0;
+    }
+
+  if (!len)
+    return node;
+
+  if (len < sizeof (node->small_value))
+    {
+      node->value = node->small_value;
+    }
+  else
+    {
+      node->value = _asn1_malloc (len);
+      if (node->value == NULL)
+       return NULL;
+    }
+  node->value_len = len;
+
+  memcpy (node->value, value, len);
+  return node;
+}
+
+/******************************************************************/
+/* Function : _asn1_set_value_octet                               */
+/* Description: sets the field VALUE in a NODE_ASN element. The   */
+/*              previous value (if exist) will be lost. The value */
+/*             given is stored as an octet string.               */
+/* Parameters:                                                    */
+/*   node: element pointer.                                       */
+/*   value: pointer to the value that you want to set.            */
+/*   len: character number of value.                              */
+/* Return: pointer to the NODE_ASN element.                       */
+/******************************************************************/
+ASN1_TYPE
+_asn1_set_value_octet (ASN1_TYPE node, const void *value, unsigned int len)
+{
+  int len2;
+  void *temp;
+
+  if (node == NULL)
+    return node;
+
+  asn1_length_der (len, NULL, &len2);
+  temp = (unsigned char *) _asn1_malloc (len + len2);
+  if (temp == NULL)
+    return NULL;
+
+  asn1_octet_der (value, len, temp, &len2);
+  return _asn1_set_value_m (node, temp, len2);
+}
+
+/* the same as _asn1_set_value except that it sets an already malloc'ed
+ * value.
+ */
+ASN1_TYPE
+_asn1_set_value_m (ASN1_TYPE node, void *value, unsigned int len)
+{
+  if (node == NULL)
+    return node;
+
+  if (node->value)
+    {
+      if (node->value != node->small_value)
+       _asn1_free (node->value);
+      node->value = NULL;
+      node->value_len = 0;
+    }
+
+  if (!len)
+    return node;
+
+  node->value = value;
+  node->value_len = len;
+
+  return node;
+}
+
+/******************************************************************/
+/* Function : _asn1_append_value                                  */
+/* Description: appends to the field VALUE in a NODE_ASN element. */
+/*                                                               */
+/* Parameters:                                                    */
+/*   node: element pointer.                                       */
+/*   value: pointer to the value that you want to be appended.    */
+/*   len: character number of value.                              */
+/* Return: pointer to the NODE_ASN element.                       */
+/******************************************************************/
+ASN1_TYPE
+_asn1_append_value (ASN1_TYPE node, const void *value, unsigned int len)
+{
+  if (node == NULL)
+    return node;
+  if (node->value != NULL && node->value != node->small_value)
+    {
+      /* value is allocated */
+      int prev_len = node->value_len;
+      node->value_len += len;
+      node->value = _asn1_realloc (node->value, node->value_len);
+      if (node->value == NULL)
+       {
+         node->value_len = 0;
+         return NULL;
+       }
+      memcpy (&node->value[prev_len], value, len);
+
+      return node;
+    }
+  else if (node->value == node->small_value)
+    {
+      /* value is in node */
+      int prev_len = node->value_len;
+      node->value_len += len;
+      node->value = _asn1_malloc (node->value_len);
+      if (node->value == NULL)
+       {
+         node->value_len = 0;
+         return NULL;
+       }
+      memcpy (node->value, node->small_value, prev_len);
+      memcpy (&node->value[prev_len], value, len);
+
+      return node;
+    }
+  else                         /* node->value == NULL */
+    return _asn1_set_value (node, value, len);
+}
+
+/******************************************************************/
+/* Function : _asn1_set_name                                      */
+/* Description: sets the field NAME in a NODE_ASN element. The    */
+/*              previous value (if exist) will be lost            */
+/* Parameters:                                                    */
+/*   node: element pointer.                                       */
+/*   name: a null terminated string with the name that you want   */
+/*         to set.                                                */
+/* Return: pointer to the NODE_ASN element.                       */
+/******************************************************************/
+ASN1_TYPE
+_asn1_set_name (ASN1_TYPE node, const char *name)
+{
+  if (node == NULL)
+    return node;
+
+  if (node->name)
+    {
+      _asn1_free (node->name);
+      node->name = NULL;
+    }
+
+  if (name == NULL)
+    return node;
+
+  if (strlen (name))
+    {
+      node->name = (char *) _asn1_strdup (name);
+      if (node->name == NULL)
+       return NULL;
+    }
+  else
+    node->name = NULL;
+  return node;
+}
+
+/******************************************************************/
+/* Function : _asn1_set_right                                     */
+/* Description: sets the field RIGHT in a NODE_ASN element.       */
+/* Parameters:                                                    */
+/*   node: element pointer.                                       */
+/*   right: pointer to a NODE_ASN element that you want be pointed*/
+/*          by NODE.                                              */
+/* Return: pointer to *NODE.                                      */
+/******************************************************************/
+ASN1_TYPE
+_asn1_set_right (ASN1_TYPE node, ASN1_TYPE right)
+{
+  if (node == NULL)
+    return node;
+  node->right = right;
+  if (right)
+    right->left = node;
+  return node;
+}
+
+/******************************************************************/
+/* Function : _asn1_get_right                                     */
+/* Description: returns the element pointed by the RIGHT field of */
+/*              a NODE_ASN element.                               */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/* Return: field RIGHT of NODE.                                   */
+/******************************************************************/
+ASN1_TYPE
+_asn1_get_right (ASN1_TYPE node)
+{
+  if (node == NULL)
+    return NULL;
+  return node->right;
+}
+
+/******************************************************************/
+/* Function : _asn1_get_last_right                                */
+/* Description: return the last element along the right chain.    */
+/* Parameters:                                                    */
+/*   node: starting element pointer.                              */
+/* Return: pointer to the last element along the right chain.     */
+/******************************************************************/
+ASN1_TYPE
+_asn1_get_last_right (ASN1_TYPE node)
+{
+  ASN1_TYPE p;
+
+  if (node == NULL)
+    return NULL;
+  p = node;
+  while (p->right)
+    p = p->right;
+  return p;
+}
+
+/******************************************************************/
+/* Function : _asn1_set_down                                      */
+/* Description: sets the field DOWN in a NODE_ASN element.        */
+/* Parameters:                                                    */
+/*   node: element pointer.                                       */
+/*   down: pointer to a NODE_ASN element that you want be pointed */
+/*          by NODE.                                              */
+/* Return: pointer to *NODE.                                      */
+/******************************************************************/
+ASN1_TYPE
+_asn1_set_down (ASN1_TYPE node, ASN1_TYPE down)
+{
+  if (node == NULL)
+    return node;
+  node->down = down;
+  if (down)
+    down->left = node;
+  return node;
+}
+
+/******************************************************************/
+/* Function : _asn1_get_down                                      */
+/* Description: returns the element pointed by the DOWN field of  */
+/*              a NODE_ASN element.                               */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/* Return: field DOWN of NODE.                                    */
+/******************************************************************/
+ASN1_TYPE
+_asn1_get_down (ASN1_TYPE node)
+{
+  if (node == NULL)
+    return NULL;
+  return node->down;
+}
+
+/******************************************************************/
+/* Function : _asn1_get_name                                      */
+/* Description: returns the name of a NODE_ASN element.           */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/* Return: a null terminated string.                              */
+/******************************************************************/
+char *
+_asn1_get_name (ASN1_TYPE node)
+{
+  if (node == NULL)
+    return NULL;
+  return node->name;
+}
+
+/******************************************************************/
+/* Function : _asn1_mod_type                                      */
+/* Description: change the field TYPE of an NODE_ASN element.     */
+/*              The new value is the old one | (bitwise or) the   */
+/*              paramener VALUE.                                  */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/*   value: the integer value that must be or-ed with the current */
+/*          value of field TYPE.                                  */
+/* Return: NODE pointer.                                          */
+/******************************************************************/
+ASN1_TYPE
+_asn1_mod_type (ASN1_TYPE node, unsigned int value)
+{
+  if (node == NULL)
+    return node;
+  node->type |= value;
+  return node;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_remove_node                                   */
+/* Description: gets free the memory allocated for an NODE_ASN    */
+/*              element (not the elements pointed by it).         */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/******************************************************************/
+void
+_asn1_remove_node (ASN1_TYPE node)
+{
+  if (node == NULL)
+    return;
+
+  if (node->name != NULL)
+    _asn1_free (node->name);
+  if (node->value != NULL && node->value != node->small_value)
+    _asn1_free (node->value);
+  _asn1_free (node);
+}
+
+/******************************************************************/
+/* Function : _asn1_find_up                                       */
+/* Description: return the father of the NODE_ASN element.        */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/* Return: Null if not found.                                     */
+/******************************************************************/
+ASN1_TYPE
+_asn1_find_up (ASN1_TYPE node)
+{
+  ASN1_TYPE p;
+
+  if (node == NULL)
+    return NULL;
+
+  p = node;
+
+  while ((p->left != NULL) && (p->left->right == p))
+    p = p->left;
+
+  return p->left;
+}
+
+/******************************************************************/
+/* Function : _asn1_delete_list                                   */
+/* Description: deletes the list elements (not the elements       */
+/*  pointed by them).                                             */
+/******************************************************************/
+void
+_asn1_delete_list (void)
+{
+  list_type *listElement;
+
+  while (firstElement)
+    {
+      listElement = firstElement;
+      firstElement = firstElement->next;
+      _asn1_free (listElement);
+    }
+}
+
+/******************************************************************/
+/* Function : _asn1_delete_list_and nodes                         */
+/* Description: deletes the list elements and the elements        */
+/*  pointed by them.                                              */
+/******************************************************************/
+void
+_asn1_delete_list_and_nodes (void)
+{
+  list_type *listElement;
+
+  while (firstElement)
+    {
+      listElement = firstElement;
+      firstElement = firstElement->next;
+      _asn1_remove_node (listElement->node);
+      _asn1_free (listElement);
+    }
+}
+
+
+char *
+_asn1_ltostr (long v, char *str)
+{
+  long d, r;
+  char temp[20];
+  int count, k, start;
+
+  if (v < 0)
+    {
+      str[0] = '-';
+      start = 1;
+      v = -v;
+    }
+  else
+    start = 0;
+
+  count = 0;
+  do
+    {
+      d = v / 10;
+      r = v - d * 10;
+      temp[start + count] = '0' + (char) r;
+      count++;
+      v = d;
+    }
+  while (v);
+
+  for (k = 0; k < count; k++)
+    str[k + start] = temp[start + count - k - 1];
+  str[count + start] = 0;
+  return str;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_change_integer_value                          */
+/* Description: converts into DER coding the value assign to an   */
+/*   INTEGER constant.                                            */
+/* Parameters:                                                    */
+/*   node: root of an ASN1element.                                */
+/* Return:                                                        */
+/*   ASN1_ELEMENT_NOT_FOUND if NODE is NULL,                       */
+/*   otherwise ASN1_SUCCESS                                             */
+/******************************************************************/
+asn1_retCode
+_asn1_change_integer_value (ASN1_TYPE node)
+{
+  ASN1_TYPE p;
+  unsigned char val[SIZEOF_UNSIGNED_LONG_INT];
+  unsigned char val2[SIZEOF_UNSIGNED_LONG_INT + 1];
+  int len;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if ((type_field (p->type) == TYPE_INTEGER) && (p->type & CONST_ASSIGN))
+       {
+         if (p->value)
+           {
+             _asn1_convert_integer (p->value, val, sizeof (val), &len);
+             asn1_octet_der (val, len, val2, &len);
+             _asn1_set_value (p, val2, len);
+           }
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else
+       {
+         if (p == node)
+           p = NULL;
+         else if (p->right)
+           p = p->right;
+         else
+           {
+             while (1)
+               {
+                 p = _asn1_find_up (p);
+                 if (p == node)
+                   {
+                     p = NULL;
+                     break;
+                   }
+                 if (p->right)
+                   {
+                     p = p->right;
+                     break;
+                   }
+               }
+           }
+       }
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_expand_object_id                              */
+/* Description: expand the IDs of an OBJECT IDENTIFIER constant.  */
+/* Parameters:                                                    */
+/*   node: root of an ASN1 element.                               */
+/* Return:                                                        */
+/*   ASN1_ELEMENT_NOT_FOUND if NODE is NULL,                       */
+/*   otherwise ASN1_SUCCESS                                             */
+/******************************************************************/
+asn1_retCode
+_asn1_expand_object_id (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2, p3, p4, p5;
+  char name_root[ASN1_MAX_NAME_SIZE], name2[2 * ASN1_MAX_NAME_SIZE + 1];
+  int move, tlen;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  _asn1_str_cpy (name_root, sizeof (name_root), node->name);
+
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) && (move == UP)))
+    {
+      if (move != UP)
+       {
+         if ((type_field (p->type) == TYPE_OBJECT_ID)
+             && (p->type & CONST_ASSIGN))
+           {
+             p2 = p->down;
+             if (p2 && (type_field (p2->type) == TYPE_CONSTANT))
+               {
+                 if (p2->value && !isdigit (p2->value[0]))
+                   {
+                     _asn1_str_cpy (name2, sizeof (name2), name_root);
+                     _asn1_str_cat (name2, sizeof (name2), ".");
+                     _asn1_str_cat (name2, sizeof (name2), p2->value);
+                     p3 = asn1_find_node (node, name2);
+                     if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                         !(p3->type & CONST_ASSIGN))
+                       return ASN1_ELEMENT_NOT_FOUND;
+                     _asn1_set_down (p, p2->right);
+                     _asn1_remove_node (p2);
+                     p2 = p;
+                     p4 = p3->down;
+                     while (p4)
+                       {
+                         if (type_field (p4->type) == TYPE_CONSTANT)
+                           {
+                             p5 = _asn1_add_node_only (TYPE_CONSTANT);
+                             _asn1_set_name (p5, p4->name);
+                             tlen = strlen (p4->value);
+                             if (tlen > 0)
+                               _asn1_set_value (p5, p4->value, tlen + 1);
+                             if (p2 == p)
+                               {
+                                 _asn1_set_right (p5, p->down);
+                                 _asn1_set_down (p, p5);
+                               }
+                             else
+                               {
+                                 _asn1_set_right (p5, p2->right);
+                                 _asn1_set_right (p2, p5);
+                               }
+                             p2 = p5;
+                           }
+                         p4 = p4->right;
+                       }
+                     move = DOWN;
+                     continue;
+                   }
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+
+  /*******************************/
+  /*       expand DEFAULT        */
+  /*******************************/
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) && (move == UP)))
+    {
+      if (move != UP)
+       {
+         if ((type_field (p->type) == TYPE_OBJECT_ID) &&
+             (p->type & CONST_DEFAULT))
+           {
+             p2 = p->down;
+             if (p2 && (type_field (p2->type) == TYPE_DEFAULT))
+               {
+                 _asn1_str_cpy (name2, sizeof (name2), name_root);
+                 _asn1_str_cat (name2, sizeof (name2), ".");
+                 _asn1_str_cat (name2, sizeof (name2), p2->value);
+                 p3 = asn1_find_node (node, name2);
+                 if (!p3 || (type_field (p3->type) != TYPE_OBJECT_ID) ||
+                     !(p3->type & CONST_ASSIGN))
+                   return ASN1_ELEMENT_NOT_FOUND;
+                 p4 = p3->down;
+                 name2[0] = 0;
+                 while (p4)
+                   {
+                     if (type_field (p4->type) == TYPE_CONSTANT)
+                       {
+                         if (name2[0])
+                           _asn1_str_cat (name2, sizeof (name2), ".");
+                         _asn1_str_cat (name2, sizeof (name2), p4->value);
+                       }
+                     p4 = p4->right;
+                   }
+                 tlen = strlen (name2);
+                 if (tlen > 0)
+                   _asn1_set_value (p2, name2, tlen + 1);
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_type_set_config                               */
+/* Description: sets the CONST_SET and CONST_NOT_USED properties  */
+/*   in the fields of the SET elements.                           */
+/* Parameters:                                                    */
+/*   node: root of an ASN1 element.                               */
+/* Return:                                                        */
+/*   ASN1_ELEMENT_NOT_FOUND if NODE is NULL,                       */
+/*   otherwise ASN1_SUCCESS                                             */
+/******************************************************************/
+asn1_retCode
+_asn1_type_set_config (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+  int move;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) && (move == UP)))
+    {
+      if (move != UP)
+       {
+         if (type_field (p->type) == TYPE_SET)
+           {
+             p2 = p->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) != TYPE_TAG)
+                   p2->type |= CONST_SET | CONST_NOT_USED;
+                 p2 = p2->right;
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_check_identifier                              */
+/* Description: checks the definitions of all the identifiers     */
+/*   and the first element of an OBJECT_ID (e.g. {pkix 0 4}).     */
+/*   The _asn1_identifierMissing global variable is filled if     */
+/*   necessary.                                                   */
+/* Parameters:                                                    */
+/*   node: root of an ASN1 element.                               */
+/* Return:                                                        */
+/*   ASN1_ELEMENT_NOT_FOUND      if NODE is NULL,                 */
+/*   ASN1_IDENTIFIER_NOT_FOUND   if an identifier is not defined, */
+/*   otherwise ASN1_SUCCESS                                       */
+/******************************************************************/
+asn1_retCode
+_asn1_check_identifier (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2;
+  char name2[ASN1_MAX_NAME_SIZE * 2 + 2];
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if (type_field (p->type) == TYPE_IDENTIFIER)
+       {
+         _asn1_str_cpy (name2, sizeof (name2), node->name);
+         _asn1_str_cat (name2, sizeof (name2), ".");
+         _asn1_str_cat (name2, sizeof (name2), p->value);
+         p2 = asn1_find_node (node, name2);
+         if (p2 == NULL)
+           {
+             strcpy (_asn1_identifierMissing, p->value);
+             return ASN1_IDENTIFIER_NOT_FOUND;
+           }
+       }
+      else if ((type_field (p->type) == TYPE_OBJECT_ID) &&
+              (p->type & CONST_DEFAULT))
+       {
+         p2 = p->down;
+         if (p2 && (type_field (p2->type) == TYPE_DEFAULT))
+           {
+             _asn1_str_cpy (name2, sizeof (name2), node->name);
+             _asn1_str_cat (name2, sizeof (name2), ".");
+             _asn1_str_cat (name2, sizeof (name2), p2->value);
+             strcpy (_asn1_identifierMissing, p2->value);
+             p2 = asn1_find_node (node, name2);
+             if (!p2 || (type_field (p2->type) != TYPE_OBJECT_ID) ||
+                 !(p2->type & CONST_ASSIGN))
+               return ASN1_IDENTIFIER_NOT_FOUND;
+             else
+               _asn1_identifierMissing[0] = 0;
+           }
+       }
+      else if ((type_field (p->type) == TYPE_OBJECT_ID) &&
+              (p->type & CONST_ASSIGN))
+       {
+         p2 = p->down;
+         if (p2 && (type_field (p2->type) == TYPE_CONSTANT))
+           {
+             if (p2->value && !isdigit (p2->value[0]))
+               {
+                 _asn1_str_cpy (name2, sizeof (name2), node->name);
+                 _asn1_str_cat (name2, sizeof (name2), ".");
+                 _asn1_str_cat (name2, sizeof (name2), p2->value);
+                 strcpy (_asn1_identifierMissing, p2->value);
+                 p2 = asn1_find_node (node, name2);
+                 if (!p2 || (type_field (p2->type) != TYPE_OBJECT_ID) ||
+                     !(p2->type & CONST_ASSIGN))
+                   return ASN1_IDENTIFIER_NOT_FOUND;
+                 else
+                   _asn1_identifierMissing[0] = 0;
+               }
+           }
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == node)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_set_default_tag                               */
+/* Description: sets the default IMPLICIT or EXPLICIT property in */
+/*   the tagged elements that don't have this declaration.        */
+/* Parameters:                                                    */
+/*   node: pointer to a DEFINITIONS element.                      */
+/* Return:                                                        */
+/*   ASN1_ELEMENT_NOT_FOUND if NODE is NULL or not a pointer to   */
+/*     a DEFINITIONS element,                                     */
+/*   otherwise ASN1_SUCCESS                                       */
+/******************************************************************/
+asn1_retCode
+_asn1_set_default_tag (ASN1_TYPE node)
+{
+  ASN1_TYPE p;
+
+  if ((node == NULL) || (type_field (node->type) != TYPE_DEFINITIONS))
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  while (p)
+    {
+      if ((type_field (p->type) == TYPE_TAG) &&
+         !(p->type & CONST_EXPLICIT) && !(p->type & CONST_IMPLICIT))
+       {
+         if (node->type & CONST_EXPLICIT)
+           p->type |= CONST_EXPLICIT;
+         else
+           p->type |= CONST_IMPLICIT;
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == node)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  return ASN1_SUCCESS;
+}
diff --git a/lib/parser_aux.h b/lib/parser_aux.h
new file mode 100644 (file)
index 0000000..def52ed
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2000, 2001, 2004, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#ifndef _PARSER_AUX_H
+#define _PARSER_AUX_H
+
+#define DER_LEN 16
+
+/***************************************/
+/*  Functions used by ASN.1 parser     */
+/***************************************/
+ASN1_TYPE _asn1_add_node (unsigned int type);
+
+ASN1_TYPE
+_asn1_set_value (ASN1_TYPE node, const void *value, unsigned int len);
+
+ASN1_TYPE _asn1_set_value_m (ASN1_TYPE node, void *value, unsigned int len);
+
+ASN1_TYPE
+_asn1_set_value_octet (ASN1_TYPE node, const void *value, unsigned int len);
+
+ASN1_TYPE
+_asn1_append_value (ASN1_TYPE node, const void *value, unsigned int len);
+
+ASN1_TYPE _asn1_set_name (ASN1_TYPE node, const char *name);
+
+ASN1_TYPE _asn1_set_right (ASN1_TYPE node, ASN1_TYPE right);
+
+ASN1_TYPE _asn1_get_right (ASN1_TYPE node);
+
+ASN1_TYPE _asn1_get_last_right (ASN1_TYPE node);
+
+ASN1_TYPE _asn1_set_down (ASN1_TYPE node, ASN1_TYPE down);
+
+char *_asn1_get_name (ASN1_TYPE node);
+
+ASN1_TYPE _asn1_get_down (ASN1_TYPE node);
+
+ASN1_TYPE _asn1_mod_type (ASN1_TYPE node, unsigned int value);
+
+void _asn1_remove_node (ASN1_TYPE node);
+
+void _asn1_delete_list (void);
+
+void _asn1_delete_list_and_nodes (void);
+
+char *_asn1_ltostr (long v, char *str);
+
+ASN1_TYPE _asn1_find_up (ASN1_TYPE node);
+
+asn1_retCode _asn1_change_integer_value (ASN1_TYPE node);
+
+asn1_retCode _asn1_expand_object_id (ASN1_TYPE node);
+
+asn1_retCode _asn1_type_set_config (ASN1_TYPE node);
+
+asn1_retCode _asn1_check_identifier (ASN1_TYPE node);
+
+asn1_retCode _asn1_set_default_tag (ASN1_TYPE node);
+
+#endif
diff --git a/lib/structure.c b/lib/structure.c
new file mode 100644 (file)
index 0000000..b1c5b30
--- /dev/null
@@ -0,0 +1,1215 @@
+/*
+ * Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+
+/*****************************************************/
+/* File: structure.c                                 */
+/* Description: Functions to create and delete an    */
+/*  ASN1 tree.                                       */
+/*****************************************************/
+
+
+#include <int.h>
+#include <structure.h>
+#include "parser_aux.h"
+#include <gstr.h>
+
+
+extern char _asn1_identifierMissing[];
+
+
+/******************************************************/
+/* Function : _asn1_add_node_only                     */
+/* Description: creates a new NODE_ASN element.       */
+/* Parameters:                                        */
+/*   type: type of the new element (see TYPE_         */
+/*         and CONST_ constants).                     */
+/* Return: pointer to the new element.                */
+/******************************************************/
+ASN1_TYPE
+_asn1_add_node_only (unsigned int type)
+{
+  ASN1_TYPE punt;
+
+  punt = (ASN1_TYPE) _asn1_calloc (1, sizeof (struct node_asn_struct));
+  if (punt == NULL)
+    return NULL;
+
+  punt->type = type;
+
+  return punt;
+}
+
+
+/******************************************************************/
+/* Function : _asn1_find_left                                     */
+/* Description: returns the NODE_ASN element with RIGHT field that*/
+/*              points the element NODE.                          */
+/* Parameters:                                                    */
+/*   node: NODE_ASN element pointer.                              */
+/* Return: NULL if not found.                                     */
+/******************************************************************/
+ASN1_TYPE
+_asn1_find_left (ASN1_TYPE node)
+{
+  if ((node == NULL) || (node->left == NULL) || (node->left->down == node))
+    return NULL;
+
+  return node->left;
+}
+
+
+asn1_retCode
+_asn1_create_static_structure (ASN1_TYPE pointer, char *output_file_name,
+                              char *vector_name)
+{
+  FILE *file;
+  ASN1_TYPE p;
+  unsigned long t;
+
+  file = fopen (output_file_name, "w");
+
+  if (file == NULL)
+    return ASN1_FILE_NOT_FOUND;
+
+  fprintf (file, "#if HAVE_CONFIG_H\n");
+  fprintf (file, "# include \"config.h\"\n");
+  fprintf (file, "#endif\n\n");
+
+  fprintf (file, "#include <libtasn1.h>\n\n");
+
+  fprintf (file, "const ASN1_ARRAY_TYPE %s[] = {\n", vector_name);
+
+  p = pointer;
+
+  while (p)
+    {
+      fprintf (file, "  { ");
+
+      if (p->name)
+       fprintf (file, "\"%s\", ", p->name);
+      else
+       fprintf (file, "NULL, ");
+
+      t = p->type;
+      if (p->down)
+       t |= CONST_DOWN;
+      if (p->right)
+       t |= CONST_RIGHT;
+
+      fprintf (file, "%lu, ", t);
+
+      if (p->value)
+       fprintf (file, "\"%s\"},\n", p->value);
+      else
+       fprintf (file, "NULL },\n");
+
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else if (p->right)
+       {
+         p = p->right;
+       }
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == pointer)
+               {
+                 p = NULL;
+                 break;
+               }
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+
+  fprintf (file, "  { NULL, 0, NULL }\n};\n");
+
+  fclose (file);
+
+  return ASN1_SUCCESS;
+}
+
+
+/**
+ * asn1_array2tree:
+ * @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: Structure created correctly.
+ *
+ * %ASN1_ELEMENT_NOT_EMPTY: *@definitions not ASN1_TYPE_EMPTY.
+ *
+ * %ASN1_IDENTIFIER_NOT_FOUND: In the file there is an identifier that
+ *   is not defined (see @errorDescription for more information).
+ *
+ * %ASN1_ARRAY_ERROR: The array pointed by @array is wrong.
+ **/
+asn1_retCode
+asn1_array2tree (const ASN1_ARRAY_TYPE * array, ASN1_TYPE * definitions,
+                char *errorDescription)
+{
+  ASN1_TYPE p, p_last = NULL;
+  unsigned long k;
+  int move;
+  asn1_retCode result;
+
+
+  if (*definitions != ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_EMPTY;
+
+  move = UP;
+
+  k = 0;
+  while (array[k].value || array[k].type || array[k].name)
+    {
+      p = _asn1_add_node (array[k].type & (~CONST_DOWN));
+      if (array[k].name)
+       _asn1_set_name (p, array[k].name);
+      if (array[k].value)
+       _asn1_set_value (p, array[k].value, strlen (array[k].value) + 1);
+
+      if (*definitions == NULL)
+       *definitions = p;
+
+      if (move == DOWN)
+       _asn1_set_down (p_last, p);
+      else if (move == RIGHT)
+       _asn1_set_right (p_last, p);
+
+      p_last = p;
+
+      if (array[k].type & CONST_DOWN)
+       move = DOWN;
+      else if (array[k].type & CONST_RIGHT)
+       move = RIGHT;
+      else
+       {
+         while (1)
+           {
+             if (p_last == *definitions)
+               break;
+
+             p_last = _asn1_find_up (p_last);
+
+             if (p_last == NULL)
+               break;
+
+             if (p_last->type & CONST_RIGHT)
+               {
+                 p_last->type &= ~CONST_RIGHT;
+                 move = RIGHT;
+                 break;
+               }
+           }                   /* while */
+       }
+      k++;
+    }                          /* while */
+
+  if (p_last == *definitions)
+    {
+      result = _asn1_check_identifier (*definitions);
+      if (result == ASN1_SUCCESS)
+       {
+         _asn1_change_integer_value (*definitions);
+         _asn1_expand_object_id (*definitions);
+       }
+    }
+  else
+    {
+      result = ASN1_ARRAY_ERROR;
+    }
+
+  if (errorDescription != NULL)
+    {
+      if (result == ASN1_IDENTIFIER_NOT_FOUND)
+       {
+         Estrcpy (errorDescription, ":: identifier '");
+         Estrcat (errorDescription, _asn1_identifierMissing);
+         Estrcat (errorDescription, "' not found");
+       }
+      else
+       errorDescription[0] = 0;
+    }
+
+  if (result != ASN1_SUCCESS)
+    {
+      _asn1_delete_list_and_nodes ();
+      *definitions = ASN1_TYPE_EMPTY;
+    }
+  else
+    _asn1_delete_list ();
+
+  return result;
+}
+
+/**
+ * asn1_delete_structure:
+ * @structure: pointer to the structure that you want to delete.
+ *
+ * Deletes the structure *@structure.  At the end, *@structure is set
+ * to ASN1_TYPE_EMPTY.
+ *
+ * Returns:
+ *
+ * %ASN1_SUCCESS: Everything OK.
+ *
+ * %ASN1_ELEMENT_NOT_FOUND: *@structure was ASN1_TYPE_EMPTY.
+ **/
+asn1_retCode
+asn1_delete_structure (ASN1_TYPE * structure)
+{
+  ASN1_TYPE p, p2, p3;
+
+  if (*structure == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = *structure;
+  while (p)
+    {
+      if (p->down)
+       {
+         p = p->down;
+       }
+      else
+       {                       /* no down */
+         p2 = p->right;
+         if (p != *structure)
+           {
+             p3 = _asn1_find_up (p);
+             _asn1_set_down (p3, p2);
+             _asn1_remove_node (p);
+             p = p3;
+           }
+         else
+           {                   /* p==root */
+             p3 = _asn1_find_left (p);
+             if (!p3)
+               {
+                 p3 = _asn1_find_up (p);
+                 if (p3)
+                   _asn1_set_down (p3, p2);
+                 else
+                   {
+                     if (p->right)
+                       p->right->left = NULL;
+                   }
+               }
+             else
+               _asn1_set_right (p3, p2);
+             _asn1_remove_node (p);
+             p = NULL;
+           }
+       }
+    }
+
+  *structure = ASN1_TYPE_EMPTY;
+  return ASN1_SUCCESS;
+}
+
+
+
+/**
+ * asn1_delete_element:
+ * @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: Everything OK.
+ *
+ * %ASN1_ELEMENT_NOT_FOUND: The name element was not found.
+ **/
+asn1_retCode
+asn1_delete_element (ASN1_TYPE structure, const char *element_name)
+{
+  ASN1_TYPE p2, p3, source_node;
+
+  source_node = asn1_find_node (structure, element_name);
+
+  if (source_node == ASN1_TYPE_EMPTY)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p2 = source_node->right;
+  p3 = _asn1_find_left (source_node);
+  if (!p3)
+    {
+      p3 = _asn1_find_up (source_node);
+      if (p3)
+       _asn1_set_down (p3, p2);
+      else if (source_node->right)
+       source_node->right->left = NULL;
+    }
+  else
+    _asn1_set_right (p3, p2);
+
+  return asn1_delete_structure (&source_node);
+}
+
+ASN1_TYPE
+_asn1_copy_structure3 (ASN1_TYPE source_node)
+{
+  ASN1_TYPE dest_node, p_s, p_d, p_d_prev;
+  int move;
+
+  if (source_node == NULL)
+    return NULL;
+
+  dest_node = _asn1_add_node_only (source_node->type);
+
+  p_s = source_node;
+  p_d = dest_node;
+
+  move = DOWN;
+
+  do
+    {
+      if (move != UP)
+       {
+         if (p_s->name)
+           _asn1_set_name (p_d, p_s->name);
+         if (p_s->value)
+           _asn1_set_value (p_d, p_s->value, p_s->value_len);
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p_s->down)
+           {
+             p_s = p_s->down;
+             p_d_prev = p_d;
+             p_d = _asn1_add_node_only (p_s->type);
+             _asn1_set_down (p_d_prev, p_d);
+           }
+         else
+           move = RIGHT;
+       }
+
+      if (p_s == source_node)
+       break;
+
+      if (move == RIGHT)
+       {
+         if (p_s->right)
+           {
+             p_s = p_s->right;
+             p_d_prev = p_d;
+             p_d = _asn1_add_node_only (p_s->type);
+             _asn1_set_right (p_d_prev, p_d);
+           }
+         else
+           move = UP;
+       }
+      if (move == UP)
+       {
+         p_s = _asn1_find_up (p_s);
+         p_d = _asn1_find_up (p_d);
+       }
+    }
+  while (p_s != source_node);
+
+  return dest_node;
+}
+
+
+static ASN1_TYPE
+_asn1_copy_structure2 (ASN1_TYPE root, const char *source_name)
+{
+  ASN1_TYPE source_node;
+
+  source_node = asn1_find_node (root, source_name);
+
+  return _asn1_copy_structure3 (source_node);
+
+}
+
+
+static asn1_retCode
+_asn1_type_choice_config (ASN1_TYPE node)
+{
+  ASN1_TYPE p, p2, p3, p4;
+  int move, tlen;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node;
+  move = DOWN;
+
+  while (!((p == node) && (move == UP)))
+    {
+      if (move != UP)
+       {
+         if ((type_field (p->type) == TYPE_CHOICE) && (p->type & CONST_TAG))
+           {
+             p2 = p->down;
+             while (p2)
+               {
+                 if (type_field (p2->type) != TYPE_TAG)
+                   {
+                     p2->type |= CONST_TAG;
+                     p3 = _asn1_find_left (p2);
+                     while (p3)
+                       {
+                         if (type_field (p3->type) == TYPE_TAG)
+                           {
+                             p4 = _asn1_add_node_only (p3->type);
+                             tlen = strlen (p3->value);
+                             if (tlen > 0)
+                               _asn1_set_value (p4, p3->value, tlen + 1);
+                             _asn1_set_right (p4, p2->down);
+                             _asn1_set_down (p2, p4);
+                           }
+                         p3 = _asn1_find_left (p3);
+                       }
+                   }
+                 p2 = p2->right;
+               }
+             p->type &= ~(CONST_TAG);
+             p2 = p->down;
+             while (p2)
+               {
+                 p3 = p2->right;
+                 if (type_field (p2->type) == TYPE_TAG)
+                   asn1_delete_structure (&p2);
+                 p2 = p3;
+               }
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+static asn1_retCode
+_asn1_expand_identifier (ASN1_TYPE * node, ASN1_TYPE root)
+{
+  ASN1_TYPE p, p2, p3;
+  char name2[ASN1_MAX_NAME_SIZE + 2];
+  int move;
+
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = *node;
+  move = DOWN;
+
+  while (!((p == *node) && (move == UP)))
+    {
+      if (move != UP)
+       {
+         if (type_field (p->type) == TYPE_IDENTIFIER)
+           {
+             _asn1_str_cpy (name2, sizeof (name2), root->name);
+             _asn1_str_cat (name2, sizeof (name2), ".");
+             _asn1_str_cat (name2, sizeof (name2), p->value);
+             p2 = _asn1_copy_structure2 (root, name2);
+             if (p2 == NULL)
+               {
+                 return ASN1_IDENTIFIER_NOT_FOUND;
+               }
+             _asn1_set_name (p2, p->name);
+             p2->right = p->right;
+             p2->left = p->left;
+             if (p->right)
+               p->right->left = p2;
+             p3 = p->down;
+             if (p3)
+               {
+                 while (p3->right)
+                   p3 = p3->right;
+                 _asn1_set_right (p3, p2->down);
+                 _asn1_set_down (p2, p->down);
+               }
+
+             p3 = _asn1_find_left (p);
+             if (p3)
+               _asn1_set_right (p3, p2);
+             else
+               {
+                 p3 = _asn1_find_up (p);
+                 if (p3)
+                   _asn1_set_down (p3, p2);
+                 else
+                   {
+                     p2->left = NULL;
+                   }
+               }
+
+             if (p->type & CONST_SIZE)
+               p2->type |= CONST_SIZE;
+             if (p->type & CONST_TAG)
+               p2->type |= CONST_TAG;
+             if (p->type & CONST_OPTION)
+               p2->type |= CONST_OPTION;
+             if (p->type & CONST_DEFAULT)
+               p2->type |= CONST_DEFAULT;
+             if (p->type & CONST_SET)
+               p2->type |= CONST_SET;
+             if (p->type & CONST_NOT_USED)
+               p2->type |= CONST_NOT_USED;
+
+             if (p == *node)
+               *node = p2;
+             _asn1_remove_node (p);
+             p = p2;
+             move = DOWN;
+             continue;
+           }
+         move = DOWN;
+       }
+      else
+       move = RIGHT;
+
+      if (move == DOWN)
+       {
+         if (p->down)
+           p = p->down;
+         else
+           move = RIGHT;
+       }
+
+      if (p == *node)
+       {
+         move = UP;
+         continue;
+       }
+
+      if (move == RIGHT)
+       {
+         if (p->right)
+           p = p->right;
+         else
+           move = UP;
+       }
+      if (move == UP)
+       p = _asn1_find_up (p);
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+/**
+ * asn1_create_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: Creation OK.
+ *
+ * %ASN1_ELEMENT_NOT_FOUND: SOURCE_NAME isn't known
+ **/
+asn1_retCode
+asn1_create_element (ASN1_TYPE definitions, const char *source_name,
+                    ASN1_TYPE * element)
+{
+  ASN1_TYPE dest_node;
+  int res;
+
+  dest_node = _asn1_copy_structure2 (definitions, source_name);
+
+  if (dest_node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  _asn1_set_name (dest_node, "");
+
+  res = _asn1_expand_identifier (&dest_node, definitions);
+  _asn1_type_choice_config (dest_node);
+
+  *element = dest_node;
+
+  return res;
+}
+
+
+/**
+ * asn1_print_structure:
+ * @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.
+ **/
+void
+asn1_print_structure (FILE * out, ASN1_TYPE structure, const char *name,
+                     int mode)
+{
+  ASN1_TYPE p, root;
+  int k, indent = 0, len, len2, len3;
+
+  if (out == NULL)
+    return;
+
+  root = asn1_find_node (structure, name);
+
+  if (root == NULL)
+    return;
+
+  p = root;
+  while (p)
+    {
+      if (mode == ASN1_PRINT_ALL)
+       {
+         for (k = 0; k < indent; k++)
+           fprintf (out, " ");
+         fprintf (out, "name:");
+         if (p->name)
+           fprintf (out, "%s  ", p->name);
+         else
+           fprintf (out, "NULL  ");
+       }
+      else
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+           case TYPE_TAG:
+           case TYPE_SIZE:
+             break;
+           default:
+             for (k = 0; k < indent; k++)
+               fprintf (out, " ");
+             fprintf (out, "name:");
+             if (p->name)
+               fprintf (out, "%s  ", p->name);
+             else
+               fprintf (out, "NULL  ");
+           }
+       }
+
+      if (mode != ASN1_PRINT_NAME)
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+             if (mode == ASN1_PRINT_ALL)
+               fprintf (out, "type:CONST");
+             break;
+           case TYPE_TAG:
+             if (mode == ASN1_PRINT_ALL)
+               fprintf (out, "type:TAG");
+             break;
+           case TYPE_SIZE:
+             if (mode == ASN1_PRINT_ALL)
+               fprintf (out, "type:SIZE");
+             break;
+           case TYPE_DEFAULT:
+             fprintf (out, "type:DEFAULT");
+             break;
+           case TYPE_NULL:
+             fprintf (out, "type:NULL");
+             break;
+           case TYPE_IDENTIFIER:
+             fprintf (out, "type:IDENTIFIER");
+             break;
+           case TYPE_INTEGER:
+             fprintf (out, "type:INTEGER");
+             break;
+           case TYPE_ENUMERATED:
+             fprintf (out, "type:ENUMERATED");
+             break;
+           case TYPE_TIME:
+             fprintf (out, "type:TIME");
+             break;
+           case TYPE_BOOLEAN:
+             fprintf (out, "type:BOOLEAN");
+             break;
+           case TYPE_SEQUENCE:
+             fprintf (out, "type:SEQUENCE");
+             break;
+           case TYPE_BIT_STRING:
+             fprintf (out, "type:BIT_STR");
+             break;
+           case TYPE_OCTET_STRING:
+             fprintf (out, "type:OCT_STR");
+             break;
+           case TYPE_GENERALSTRING:
+             fprintf (out, "type:GENERALSTRING");
+             break;
+           case TYPE_SEQUENCE_OF:
+             fprintf (out, "type:SEQ_OF");
+             break;
+           case TYPE_OBJECT_ID:
+             fprintf (out, "type:OBJ_ID");
+             break;
+           case TYPE_ANY:
+             fprintf (out, "type:ANY");
+             break;
+           case TYPE_SET:
+             fprintf (out, "type:SET");
+             break;
+           case TYPE_SET_OF:
+             fprintf (out, "type:SET_OF");
+             break;
+           case TYPE_CHOICE:
+             fprintf (out, "type:CHOICE");
+             break;
+           case TYPE_DEFINITIONS:
+             fprintf (out, "type:DEFINITIONS");
+             break;
+           default:
+             break;
+           }
+       }
+
+      if ((mode == ASN1_PRINT_NAME_TYPE_VALUE) || (mode == ASN1_PRINT_ALL))
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+             if (mode == ASN1_PRINT_ALL)
+               if (p->value)
+                 fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_TAG:
+             if (mode == ASN1_PRINT_ALL)
+               if (p->value)
+                 fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_SIZE:
+             if (mode == ASN1_PRINT_ALL)
+               if (p->value)
+                 fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_DEFAULT:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             else if (p->type & CONST_TRUE)
+               fprintf (out, "  value:TRUE");
+             else if (p->type & CONST_FALSE)
+               fprintf (out, "  value:FALSE");
+             break;
+           case TYPE_IDENTIFIER:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_INTEGER:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &len2);
+                 fprintf (out, "  value:0x");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_ENUMERATED:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &len2);
+                 fprintf (out, "  value:0x");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_TIME:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_BOOLEAN:
+             if (p->value)
+               {
+                 if (p->value[0] == 'T')
+                   fprintf (out, "  value:TRUE");
+                 else if (p->value[0] == 'F')
+                   fprintf (out, "  value:FALSE");
+               }
+             break;
+           case TYPE_BIT_STRING:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &len2);
+                 if (len > 0)
+                   {
+                     fprintf (out, "  value(%i):",
+                              (len - 1) * 8 - (p->value[len2]));
+                     for (k = 1; k < len; k++)
+                       fprintf (out, "%02x", (p->value)[k + len2]);
+                   }
+               }
+             break;
+           case TYPE_OCTET_STRING:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &len2);
+                 fprintf (out, "  value:");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_GENERALSTRING:
+             if (p->value)
+               {
+                 len2 = -1;
+                 len = asn1_get_length_der (p->value, p->value_len, &len2);
+                 fprintf (out, "  value:");
+                 if (len > 0)
+                   for (k = 0; k < len; k++)
+                     fprintf (out, "%02x", (p->value)[k + len2]);
+               }
+             break;
+           case TYPE_OBJECT_ID:
+             if (p->value)
+               fprintf (out, "  value:%s", p->value);
+             break;
+           case TYPE_ANY:
+             if (p->value)
+               {
+                 len3 = -1;
+                 len2 = asn1_get_length_der (p->value, p->value_len, &len3);
+                 fprintf (out, "  value:");
+                 if (len2 > 0)
+                   for (k = 0; k < len2; k++)
+                     fprintf (out, "%02x", (p->value)[k + len3]);
+               }
+             break;
+           case TYPE_SET:
+           case TYPE_SET_OF:
+           case TYPE_CHOICE:
+           case TYPE_DEFINITIONS:
+           case TYPE_SEQUENCE_OF:
+           case TYPE_SEQUENCE:
+           case TYPE_NULL:
+             break;
+           default:
+             break;
+           }
+       }
+
+      if (mode == ASN1_PRINT_ALL)
+       {
+         if (p->type & 0x1FFFFF00)
+           {
+             fprintf (out, "  attr:");
+             if (p->type & CONST_UNIVERSAL)
+               fprintf (out, "UNIVERSAL,");
+             if (p->type & CONST_PRIVATE)
+               fprintf (out, "PRIVATE,");
+             if (p->type & CONST_APPLICATION)
+               fprintf (out, "APPLICATION,");
+             if (p->type & CONST_EXPLICIT)
+               fprintf (out, "EXPLICIT,");
+             if (p->type & CONST_IMPLICIT)
+               fprintf (out, "IMPLICIT,");
+             if (p->type & CONST_TAG)
+               fprintf (out, "TAG,");
+             if (p->type & CONST_DEFAULT)
+               fprintf (out, "DEFAULT,");
+             if (p->type & CONST_TRUE)
+               fprintf (out, "TRUE,");
+             if (p->type & CONST_FALSE)
+               fprintf (out, "FALSE,");
+             if (p->type & CONST_LIST)
+               fprintf (out, "LIST,");
+             if (p->type & CONST_MIN_MAX)
+               fprintf (out, "MIN_MAX,");
+             if (p->type & CONST_OPTION)
+               fprintf (out, "OPTION,");
+             if (p->type & CONST_1_PARAM)
+               fprintf (out, "1_PARAM,");
+             if (p->type & CONST_SIZE)
+               fprintf (out, "SIZE,");
+             if (p->type & CONST_DEFINED_BY)
+               fprintf (out, "DEF_BY,");
+             if (p->type & CONST_GENERALIZED)
+               fprintf (out, "GENERALIZED,");
+             if (p->type & CONST_UTC)
+               fprintf (out, "UTC,");
+             if (p->type & CONST_SET)
+               fprintf (out, "SET,");
+             if (p->type & CONST_NOT_USED)
+               fprintf (out, "NOT_USED,");
+             if (p->type & CONST_ASSIGN)
+               fprintf (out, "ASSIGNMENT,");
+           }
+       }
+
+      if (mode == ASN1_PRINT_ALL)
+       {
+         fprintf (out, "\n");
+       }
+      else
+       {
+         switch (type_field (p->type))
+           {
+           case TYPE_CONSTANT:
+           case TYPE_TAG:
+           case TYPE_SIZE:
+             break;
+           default:
+             fprintf (out, "\n");
+           }
+       }
+
+      if (p->down)
+       {
+         p = p->down;
+         indent += 2;
+       }
+      else if (p == root)
+       {
+         p = NULL;
+         break;
+       }
+      else if (p->right)
+       p = p->right;
+      else
+       {
+         while (1)
+           {
+             p = _asn1_find_up (p);
+             if (p == root)
+               {
+                 p = NULL;
+                 break;
+               }
+             indent -= 2;
+             if (p->right)
+               {
+                 p = p->right;
+                 break;
+               }
+           }
+       }
+    }
+}
+
+
+
+/**
+ * asn1_number_of_elements:
+ * @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: Creation OK.
+ *
+ *  %ASN1_ELEMENT_NOT_FOUND: NAME isn't known.
+ *
+ *  %ASN1_GENERIC_ERROR: Pointer num equal to NULL.
+ **/
+asn1_retCode
+asn1_number_of_elements (ASN1_TYPE element, const char *name, int *num)
+{
+  ASN1_TYPE node, p;
+
+  if (num == NULL)
+    return ASN1_GENERIC_ERROR;
+
+  *num = 0;
+
+  node = asn1_find_node (element, name);
+  if (node == NULL)
+    return ASN1_ELEMENT_NOT_FOUND;
+
+  p = node->down;
+
+  while (p)
+    {
+      if ((p->name) && (p->name[0] == '?'))
+       (*num)++;
+      p = p->right;
+    }
+
+  return ASN1_SUCCESS;
+}
+
+
+/**
+ * asn1_find_structure_from_oid:
+ * @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.
+ **/
+const char *
+asn1_find_structure_from_oid (ASN1_TYPE definitions, const char *oidValue)
+{
+  char definitionsName[ASN1_MAX_NAME_SIZE], name[2 * ASN1_MAX_NAME_SIZE + 1];
+  char value[ASN1_MAX_NAME_SIZE];
+  ASN1_TYPE p;
+  int len;
+  asn1_retCode result;
+
+  if ((definitions == ASN1_TYPE_EMPTY) || (oidValue == NULL))
+    return NULL;               /* ASN1_ELEMENT_NOT_FOUND; */
+
+
+  strcpy (definitionsName, definitions->name);
+  strcat (definitionsName, ".");
+
+  /* search the OBJECT_ID into definitions */
+  p = definitions->down;
+  while (p)
+    {
+      if ((type_field (p->type) == TYPE_OBJECT_ID) &&
+         (p->type & CONST_ASSIGN))
+       {
+         strcpy (name, definitionsName);
+         strcat (name, p->name);
+
+         len = ASN1_MAX_NAME_SIZE;
+         result = asn1_read_value (definitions, name, value, &len);
+
+         if ((result == ASN1_SUCCESS) && (!strcmp (oidValue, value)))
+           {
+             p = p->right;
+             if (p == NULL)    /* reach the end of ASN1 definitions */
+               return NULL;    /* ASN1_ELEMENT_NOT_FOUND; */
+
+             return p->name;
+           }
+       }
+      p = p->right;
+    }
+
+  return NULL;                 /* ASN1_ELEMENT_NOT_FOUND; */
+}
+
+/**
+ * asn1_copy_node:
+ * @dst: Destination ASN1_TYPE node.
+ * @dst_name: Field name in destination node.
+ * @src: Source ASN1_TYPE node.
+ * @src_name: Field name in source node.
+ *
+ * Create a deep copy of a ASN1_TYPE variable.
+ *
+ * Return value: Return %ASN1_SUCCESS on success.
+ **/
+asn1_retCode
+asn1_copy_node (ASN1_TYPE dst, const char *dst_name,
+               ASN1_TYPE src, const char *src_name)
+{
+/* FIXME: rewrite using copy_structure().
+ * It seems quite hard to do.
+ */
+  int result;
+  ASN1_TYPE dst_node;
+  void *data = NULL;
+  int size = 0;
+
+  result = asn1_der_coding (src, src_name, NULL, &size, NULL);
+  if (result != ASN1_MEM_ERROR)
+    return result;
+
+  data = _asn1_malloc (size);
+  if (data == NULL)
+    return ASN1_MEM_ERROR;
+
+  result = asn1_der_coding (src, src_name, data, &size, NULL);
+  if (result != ASN1_SUCCESS)
+    {
+      _asn1_free (data);
+      return result;
+    }
+
+  dst_node = asn1_find_node (dst, dst_name);
+  if (dst_node == NULL)
+    {
+      _asn1_free (data);
+      return ASN1_ELEMENT_NOT_FOUND;
+    }
+
+  result = asn1_der_decoding (&dst_node, data, size, NULL);
+
+  _asn1_free (data);
+
+  return result;
+}
diff --git a/lib/structure.h b/lib/structure.h
new file mode 100644 (file)
index 0000000..3885afc
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+/*************************************************/
+/* File: structure.h                             */
+/* Description: list of exported object by       */
+/*   "structure.c"                               */
+/*************************************************/
+
+#ifndef _STRUCTURE_H
+#define _STRUCTURE_H
+
+asn1_retCode _asn1_create_static_structure (ASN1_TYPE pointer,
+                                           char *output_file_name,
+                                           char *vector_name);
+
+ASN1_TYPE _asn1_copy_structure3 (ASN1_TYPE source_node);
+
+ASN1_TYPE _asn1_add_node_only (unsigned int type);
+
+ASN1_TYPE _asn1_find_left (ASN1_TYPE node);
+
+#endif
diff --git a/lib/version.c b/lib/version.c
new file mode 100644 (file)
index 0000000..ad7b43e
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2000, 2001, 2004, 2006, 2007, 2008, 2009, 2010 Free
+ * Software Foundation, Inc.
+ *
+ * This file is part of LIBTASN1.
+ *
+ * The LIBTASN1 library is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>            /* for strverscmp */
+
+#include "libtasn1.h"
+
+/**
+ * asn1_check_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.
+ */
+const char *
+asn1_check_version (const char *req_version)
+{
+  if (!req_version || strverscmp (req_version, ASN1_VERSION) <= 0)
+    return ASN1_VERSION;
+
+  return NULL;
+}
diff --git a/m4/gtk-doc.m4 b/m4/gtk-doc.m4
new file mode 100644 (file)
index 0000000..2cfa1e7
--- /dev/null
@@ -0,0 +1,61 @@
+dnl -*- mode: autoconf -*-
+
+# serial 1
+
+dnl Usage:
+dnl   GTK_DOC_CHECK([minimum-gtk-doc-version])
+AC_DEFUN([GTK_DOC_CHECK],
+[
+  AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
+  AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
+
+  dnl check for tools we added during development
+  AC_PATH_PROG([GTKDOC_CHECK],[gtkdoc-check])
+  AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
+  AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
+
+  dnl for overriding the documentation installation directory
+  AC_ARG_WITH([html-dir],
+    AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
+    [with_html_dir='${datadir}/gtk-doc/html'])
+  HTML_DIR="$with_html_dir"
+  AC_SUBST([HTML_DIR])
+
+  dnl enable/disable documentation building
+  AC_ARG_ENABLE([gtk-doc],
+    AS_HELP_STRING([--enable-gtk-doc],
+                   [use gtk-doc to build documentation [[default=no]]]),,
+    [enable_gtk_doc=no])
+
+  if test x$enable_gtk_doc = xyes; then
+    ifelse([$1],[],
+      [PKG_CHECK_EXISTS([gtk-doc],,
+                        AC_MSG_ERROR([gtk-doc not installed and --enable-gtk-doc requested]))],
+      [PKG_CHECK_EXISTS([gtk-doc >= $1],,
+                        AC_MSG_ERROR([You need to have gtk-doc >= $1 installed to build $PACKAGE_NAME]))])
+  fi
+
+  AC_MSG_CHECKING([whether to build gtk-doc documentation])
+  AC_MSG_RESULT($enable_gtk_doc)
+
+  dnl enable/disable output formats
+  AC_ARG_ENABLE([gtk-doc-html],
+    AS_HELP_STRING([--enable-gtk-doc-html],
+                   [build documentation in html format [[default=yes]]]),,
+    [enable_gtk_doc_html=yes])
+    AC_ARG_ENABLE([gtk-doc-pdf],
+      AS_HELP_STRING([--enable-gtk-doc-pdf],
+                     [build documentation in pdf format [[default=no]]]),,
+      [enable_gtk_doc_pdf=no])
+
+  if test -z "$GTKDOC_MKPDF"; then
+    enable_gtk_doc_pdf=no
+  fi
+
+
+  AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
+  AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
+  AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
+  AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
+  AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
+])
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644 (file)
index 0000000..a3fee53
--- /dev/null
@@ -0,0 +1,7377 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file 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.
+
+m4_define([_LT_COPYING], [dnl
+#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
+#                 2006, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+#   This file is part of GNU Libtool.
+#
+# GNU Libtool 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 2 of
+# the License, or (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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 GNU Libtool; see the file COPYING.  If not, a copy
+# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
+# obtained by writing to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+# serial 56 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+                  [m4_fatal([Libtool version $1 or higher is required],
+                            63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\    *)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ltmain"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+m4_defun([_LT_CC_BASENAME],
+[for cc_temp in $1""; do
+  case $cc_temp in
+    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options which allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}" ; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+_LT_PROG_ECHO_BACKSLASH
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from `configure', and `config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# `config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain="$ac_aux_dir/ltmain.sh"
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the `libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+       [m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+       [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+       [tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+          m4_quote(lt_decl_varnames),
+       m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+                       lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to `config.status' so that its
+# declaration there will have the same value as in `configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags="_LT_TAGS"dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+                                          [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into `config.status', and then the shell code to quote escape them in
+# for loops in `config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+       dnl If the libtool generation code has been placed in $CONFIG_LT,
+       dnl instead of duplicating it all over again into config.status,
+       dnl then we will have config.status run $CONFIG_LT later, so it
+       dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Fix-up fallback echo if it was mangled by the above quoting rules.
+case \$lt_ECHO in
+*'\\\[$]0 --fallback-echo"')dnl "
+  lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
+  ;;
+esac
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+cat >"$CONFIG_LT" <<_LTEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate a libtool stub with the current configuration.
+
+lt_cl_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AS_SHELL_SANITIZE
+_AS_PREPARE
+
+exec AS_MESSAGE_FD>&1
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+\`$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool@gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2008 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test $[#] != 0
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try \`$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try \`$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+if test "$no_create" != yes; then
+  lt_cl_success=:
+  test "$silent" = yes &&
+    lt_config_lt_args="$lt_config_lt_args --quiet"
+  exec AS_MESSAGE_LOG_FD>/dev/null
+  $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+  exec AS_MESSAGE_LOG_FD>>config.log
+  $lt_cl_success || AS_EXIT(1)
+fi
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options which allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}" ; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile="${ofile}T"
+    trap "$RM \"$cfgfile\"; exit 1" 1 2 15
+    $RM "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+
+# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  _LT_PROG_XSI_SHELLFNS
+
+  sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
+    || (rm -f "$cfgfile"; exit 1)
+
+  mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    TIMESTAMP='$TIMESTAMP'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],                 [_LT_LANG(C)],
+  [C++],               [_LT_LANG(CXX)],
+  [Java],              [_LT_LANG(GCJ)],
+  [Fortran 77],                [_LT_LANG(F77)],
+  [Fortran],           [_LT_LANG(FC)],
+  [Windows Resource],  [_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+       [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+       [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+       [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "${LT_MULTI_MODULE}"; then
+       # By default we will add the -single_module flag. You can override
+       # by either setting the environment variable LT_MULTI_MODULE
+       # non-empty at configure time, or by adding -multi_module to the
+       # link flags.
+       rm -rf libconftest.dylib*
+       echo "int foo(void){return 1;}" > conftest.c
+       echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+       $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+         -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+       if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
+         lt_cv_apple_cc_single_mod=yes
+       else
+         cat conftest.err >&AS_MESSAGE_LOG_FD
+       fi
+       rm -rf libconftest.dylib*
+       rm -f conftest.*
+      fi])
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+       [lt_cv_ld_exported_symbols_list=yes],
+       [lt_cv_ld_exported_symbols_list=no])
+       LDFLAGS="$save_LDFLAGS"
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]]*)
+         _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+      _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
+    fi
+    if test "$DSYMUTIL" != ":"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES
+# --------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  case $cc_basename in
+     ifort*) _lt_dar_can_shared=yes ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test "$_lt_dar_can_shared" = "yes"; then
+    output_verbose_link_cmd=echo
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
+    m4_if([$1], [CXX],
+[   if test "$lt_cv_apple_cc_single_mod" != "yes"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX
+# -----------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+    /Import File Strings/,/^$/ {
+       /^0/ {
+           s/^0  *\(.*\)$/\1/
+           p
+       }
+    }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+# Check for a 64-bit object if we didn't find anything.
+if test -z "$aix_libpath"; then
+  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
+if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[ifdef([AC_DIVERSION_NOTICE],
+            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+        [AC_DIVERT_PUSH(NOTICE)])
+$1
+AC_DIVERT_POP
+])# _LT_SHELL_INIT
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[_LT_SHELL_INIT([
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$lt_ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+ECHO=${lt_ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
+  # Yippee, $ECHO works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<_LT_EOF
+[$]*
+_LT_EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test -z "$lt_ECHO"; then
+  if test "X${echo_test_string+set}" != Xset; then
+    # find a string as large as possible, as long as the shell can cope with it
+    for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+      # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+      if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
+        { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
+      then
+        break
+      fi
+    done
+  fi
+
+  if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+     echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+     test "X$echo_testing_string" = "X$echo_test_string"; then
+    :
+  else
+    # The Solaris, AIX, and Digital Unix default echo programs unquote
+    # backslashes.  This makes it impossible to quote backslashes using
+    #   echo "$something" | sed 's/\\/\\\\/g'
+    #
+    # So, first we look for a working echo in the user's PATH.
+
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for dir in $PATH /usr/ucb; do
+      IFS="$lt_save_ifs"
+      if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+         test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        ECHO="$dir/echo"
+        break
+      fi
+    done
+    IFS="$lt_save_ifs"
+
+    if test "X$ECHO" = Xecho; then
+      # We didn't find a better echo, so look for alternatives.
+      if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
+         echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
+         test "X$echo_testing_string" = "X$echo_test_string"; then
+        # This shell has a builtin print -r that does the trick.
+        ECHO='print -r'
+      elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
+          test "X$CONFIG_SHELL" != X/bin/ksh; then
+        # If we have ksh, try running configure again with it.
+        ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+        export ORIGINAL_CONFIG_SHELL
+        CONFIG_SHELL=/bin/ksh
+        export CONFIG_SHELL
+        exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+      else
+        # Try using printf.
+        ECHO='printf %s\n'
+        if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
+          echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
+          test "X$echo_testing_string" = "X$echo_test_string"; then
+         # Cool, printf works
+         :
+        elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+         export CONFIG_SHELL
+         SHELL="$CONFIG_SHELL"
+         export SHELL
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+            test "X$echo_testing_string" = 'X\t' &&
+            echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+            test "X$echo_testing_string" = "X$echo_test_string"; then
+         ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
+        else
+         # maybe with a smaller string...
+         prev=:
+
+         for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+           if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
+           then
+             break
+           fi
+           prev="$cmd"
+         done
+
+         if test "$prev" != 'sed 50q "[$]0"'; then
+           echo_test_string=`eval $prev`
+           export echo_test_string
+           exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+         else
+           # Oops.  We lost completely, so just stick with echo.
+           ECHO=echo
+         fi
+        fi
+      fi
+    fi
+  fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+lt_ECHO=$ECHO
+if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(lt_ECHO)
+])
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1],
+    [An echo program that does not interpret backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+       HPUX_IA64_MODE="32"
+       ;;
+      *ELF-64*)
+       HPUX_IA64_MODE="64"
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test "$lt_cv_prog_gnu_ld" = yes; then
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -melf32bsmip"
+         ;;
+       *N32*)
+         LD="${LD-ld} -melf32bmipn32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -melf64bmip"
+       ;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+       *32-bit*)
+         LD="${LD-ld} -32"
+         ;;
+       *N32*)
+         LD="${LD-ld} -n32"
+         ;;
+       *64-bit*)
+         LD="${LD-ld} -64"
+         ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_i386_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_i386"
+           ;;
+         ppc64-*linux*|powerpc64-*linux*)
+           LD="${LD-ld} -m elf32ppclinux"
+           ;;
+         s390x-*linux*)
+           LD="${LD-ld} -m elf_s390"
+           ;;
+         sparc64-*linux*)
+           LD="${LD-ld} -m elf32_sparc"
+           ;;
+       esac
+       ;;
+      *64-bit*)
+       case $host in
+         x86_64-*kfreebsd*-gnu)
+           LD="${LD-ld} -m elf_x86_64_fbsd"
+           ;;
+         x86_64-*linux*)
+           LD="${LD-ld} -m elf_x86_64"
+           ;;
+         ppc*-*linux*|powerpc*-*linux*)
+           LD="${LD-ld} -m elf64ppc"
+           ;;
+         s390*-*linux*|s390*-*tpf*)
+           LD="${LD-ld} -m elf64_s390"
+           ;;
+         sparc*-*linux*)
+           LD="${LD-ld} -m elf64_sparc"
+           ;;
+       esac
+       ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+sparc*-*solaris*)
+  # Find out which ABI we are using.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*) LD="${LD-ld} -m elf64_sparc" ;;
+      *)
+       if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+         LD="${LD-ld} -64"
+       fi
+       ;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks="$enable_libtool_lock"
+])# _LT_ENABLE_LOCK
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[AC_CHECK_TOOL(AR, ar, false)
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1])
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS="$LDFLAGS"
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS="$save_LDFLAGS"
+])
+
+if test x"[$]$2" = xyes; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring="ABCD"
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536      # usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8 ; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
+                = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
+             test $i != 17 # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n $lt_cv_sys_max_cmd_len ; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL          RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL                DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL                0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW           RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW         DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW       RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW     DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW     0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+  # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
+    lt_cv_dlopen="dyld"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+         [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+       [AC_CHECK_FUNC([dlopen],
+             [lt_cv_dlopen="dlopen"],
+         [AC_CHECK_LIB([dl], [dlopen],
+               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+           [AC_CHECK_LIB([svld], [dlopen],
+                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+             [AC_CHECK_LIB([dld], [dld_link],
+                   [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
+             ])
+           ])
+         ])
+       ])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+         lt_cv_dlopen_self, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+           lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+         lt_cv_dlopen_self_static, [dnl
+         _LT_TRY_DLOPEN_SELF(
+           lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+           lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+        [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+        [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+        [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+       [Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links="nottested"
+if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
+  [Define to the sub-directory in which libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
+
+  # We can hardcode non-existent directories.
+  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
+     test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
+   test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP" ; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+       [], [
+if test "$GCC" = yes; then
+  case $host_os in
+    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+    *) lt_awk_arg="/^libraries:/" ;;
+  esac
+  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+  if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
+  else
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+  fi
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary.
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+    else
+      test -d "$lt_sys_path" && \
+       lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+  lt_foo="";
+  lt_count=0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo="/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=".so"
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}${shared_ext}$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+          echo ' yes '
+          echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
+       :
+      else
+       can_build_shared=no
+      fi
+      ;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}${shared_ext}$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='${libname}${shared_ext}'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=".dll"
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$host_os in
+  yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \${file}`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH printed by
+        # mingw gcc, but we are running on Cygwin. Gcc prints its search
+        # path with ; separators, and with drive letters. We can handle the
+        # drive letters (cygwin fileutils understands them), so leave them,
+        # especially as we might pass files found there to a mingw objdump,
+        # which wouldn't understand a cygwinified path. Ahh.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      ;;
+    esac
+    ;;
+
+  *)
+    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
+  soname_spec='${libname}${release}${major}$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[123]]*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    if test "X$HPUX_IA64_MODE" = X32; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+    fi
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+       if test "$lt_cv_prog_gnu_ld" = yes; then
+               version_type=linux
+       else
+               version_type=irix
+       fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # Some binutils ld are patched to set DT_RUNPATH
+  save_LDFLAGS=$LDFLAGS
+  save_libdir=$libdir
+  eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+       LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+    [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+       [shlibpath_overrides_runpath=yes])])
+  LDFLAGS=$save_LDFLAGS
+  libdir=$save_libdir
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Append ld.so.conf contents to the search path
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[  ]*hwcap[        ]/d;s/[:,      ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsdelf*-gnu)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='NetBSD ld.elf_so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
+    soname_spec='${libname}${release}${shared_ext}$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec="/usr/lib"
+  need_lib_prefix=no
+  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
+  case $host_os in
+    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
+    *)                         need_version=no  ;;
+  esac
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case $host_os in
+      openbsd2.[[89]] | openbsd2.[[89]].*)
+       shlibpath_overrides_runpath=no
+       ;;
+      *)
+       shlibpath_overrides_runpath=yes
+       ;;
+      esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  ;;
+
+os2*)
+  libname_spec='$name'
+  shrext_cmds=".dll"
+  need_lib_prefix=no
+  library_names_spec='$libname${shared_ext} $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}${shared_ext}$major'
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
+    soname_spec='$libname${shared_ext}.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=freebsd-elf
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test "$with_gnu_ld" = yes; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+       ;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  soname_spec='${libname}${release}${shared_ext}$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
+  sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+fi
+if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
+  sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+fi
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
+    [Run-time system search path for libraries])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program which can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD="$MAGIC_CMD"
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+       case $deplibs_check_method in
+       "file_magic "*)
+         file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+         MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+         if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+           $EGREP "$file_magic_regex" > /dev/null; then
+           :
+         else
+           cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool@gnu.org
+
+_LT_EOF
+         fi ;;
+       esac
+      fi
+      break
+    fi
+  done
+  IFS="$lt_save_ifs"
+  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+        [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program which can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test "$withval" = no || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS="$lt_save_ifs"
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break
+       ;;
+      *)
+       test "$with_gnu_ld" != yes && break
+       ;;
+      esac
+    fi
+  done
+  IFS="$lt_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  darwin*)
+    if test "$GCC" = yes; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_DECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given extended regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd* | netbsdelf*-gnu)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method == "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  lt_nm_to_check="${ac_tool_prefix}nm"
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS="$lt_save_ifs"
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm="$ac_dir/$lt_tmp_nm"
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
+       # Check to see if the nm accepts a BSD-compat flag.
+       # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+       #   nm: unknown option "B" ignored
+       # Tru64's nm complains that /dev/null is an invalid object file
+       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
+       */dev/null* | *'Invalid file or object type'*)
+         lt_cv_path_NM="$tmp_nm -B"
+         break
+         ;;
+       *)
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+         */dev/null*)
+           lt_cv_path_NM="$tmp_nm -p"
+           break
+           ;;
+         *)
+           lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+           continue # so that we can try to find one that supports BSD flags
+           ;;
+         esac
+         ;;
+       esac
+      fi
+    done
+    IFS="$lt_save_ifs"
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test "$lt_cv_path_NM" != "no"; then
+  NM="$lt_cv_path_NM"
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
+  AC_SUBST([DUMPBIN])
+  if test "$DUMPBIN" != ":"; then
+    NM="$DUMPBIN"
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test "$GCC" = yes; then
+  _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+       [Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test "$host_cpu" = ia64; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p'"
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/  {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"lib\2\", (void *) \&\2},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function
+    # and D for any global variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
+"     {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
+"     s[1]~/^[@?]/{print s[1], s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+       mv -f "$nlist"T "$nlist"
+      else
+       rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+       if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+         cat <<_LT_EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+         # Now generate the symbol file.
+         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+         cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+const struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+         # Now try linking the two files.
+         mv conftest.$ac_objext conftstm.$ac_objext
+         lt_save_LIBS="$LIBS"
+         lt_save_CFLAGS="$CFLAGS"
+         LIBS="conftstm.$ac_objext"
+         CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+         if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+           pipe_works=yes
+         fi
+         LIBS="$lt_save_LIBS"
+         CFLAGS="$lt_save_CFLAGS"
+       else
+         echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+       fi
+      else
+       echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test "$GXX" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+       # All AIX code is PIC.
+       if test "$host_cpu" = ia64; then
+         # AIX 5 now supports IA64 processor
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+       else
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+       fi
+       ;;
+      chorus*)
+       case $cc_basename in
+       cxch68*)
+         # Green Hills C++ Compiler
+         # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+         ;;
+       esac
+       ;;
+      dgux*)
+       case $cc_basename in
+         ec++*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         ghcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      freebsd* | dragonfly*)
+       # FreeBSD uses GNU C++
+       ;;
+      hpux9* | hpux10* | hpux11*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           if test "$host_cpu" != ia64; then
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+           fi
+           ;;
+         aCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+           case $host_cpu in
+           hppa*64*|ia64*)
+             # +Z the default
+             ;;
+           *)
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+             ;;
+           esac
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      interix*)
+       # This is c89, which is MS Visual C++ (no shared libs)
+       # Anyone wants to do a port?
+       ;;
+      irix5* | irix6* | nonstopux*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           # CC pic flag -KPIC is the default.
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+       case $cc_basename in
+         KCC*)
+           # KAI C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           ;;
+         ecpc* )
+           # old Intel C++ for x86_64 which still supported -KPIC.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         icpc* )
+           # Intel C++, used to be incompatible with GCC.
+           # ICC 10 doesn't accept -KPIC any more.
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+           ;;
+         pgCC* | pgcpp*)
+           # Portland Group C++ compiler
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         cxx*)
+           # Compaq C++
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         xlc* | xlC*)
+           # IBM XL 8.0 on PPC
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+             _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+             _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+      lynxos*)
+       ;;
+      m88k*)
+       ;;
+      mvs*)
+       case $cc_basename in
+         cxx*)
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      netbsd* | netbsdelf*-gnu)
+       ;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+       case $cc_basename in
+         KCC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+           ;;
+         RCC*)
+           # Rational C++ 2.4.1
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         cxx*)
+           # Digital/Compaq C++
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           # Make sure the PIC flag is empty.  It appears that all Alpha
+           # Linux and Compaq Tru64 Unix objects are PIC.
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      psos*)
+       ;;
+      solaris*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+           ;;
+         gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sunos4*)
+       case $cc_basename in
+         CC*)
+           # Sun C++ 4.x
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+         lcc*)
+           # Lucid
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+       case $cc_basename in
+         CC*)
+           _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+           ;;
+       esac
+       ;;
+      tandem*)
+       case $cc_basename in
+         NCC*)
+           # NonStop-UX NCC 3.20
+           _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+           ;;
+         *)
+           ;;
+       esac
+       ;;
+      vxworks*)
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+       ;;
+    esac
+  fi
+],
+[
+  if test "$GCC" = yes; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the `-m68020' flag to GCC prevents building anything better,
+            # like `-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       ;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test "$host_cpu" = ia64; then
+       # AIX 5 now supports IA64 processor
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+       [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+       # +Z the default
+       ;;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+       ;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+      # old Intel for x86_64 which still supported -KPIC.
+      ecc*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+       ;;
+      pgcc* | pgf77* | pgf90* | pgf95*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+       # which looks to be a dead project)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl*)
+       # IBM XL C 8.0/Fortran 10.1 on PPC
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+       ;;
+      *)
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)
+         # Sun C 5.9
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+         ;;
+       *Sun\ F*)
+         # Sun Fortran 8.3 passes all unrecognized flags to the linker
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+         _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+         ;;
+       esac
+       ;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95*)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+       _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms which do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+       [How to pass a linker flag through the compiler])
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+       [Additional compiler flags for building library objects])
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+       [Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to AIX nm, but means don't demangle with GNU nm
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+  ;;
+  cygwin* | mingw* | cegcc*)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+  ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  ;;
+  esac
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ` (' and `)$', so one must not match beginning or
+  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+  # as well as any symbol that contains `d'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+  linux* | k*bsd*-gnu)
+    _LT_TAGVAR(link_all_deplibs, $1)=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+  if test "$with_gnu_ld" = yes; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='${wl}'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+       # support --undefined.  This deserves some investigation.  FIXME
+       _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+       # If the export-symbols file already is a .def file (1st line
+       # is EXPORTS), use it as is; otherwise, prepend...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+         cp $export_symbols $output_objdir/$soname.def;
+       else
+         echo EXPORTS > $output_objdir/$soname.def;
+         cat $export_symbols >> $output_objdir/$soname.def;
+       fi~
+       $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test "$host_os" = linux-dietlibc; then
+       case $cc_basename in
+         diet\ *) tmp_diet=yes;;       # linux-dietlibc with static linking (!diet-dyn)
+       esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+        && test "$tmp_diet" = no
+      then
+       tmp_addflag=
+       tmp_sharedflag='-shared'
+       case $cc_basename,$host_cpu in
+        pgcc*)                         # Portland Group C compiler
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag'
+         ;;
+       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         tmp_addflag=' $pic_flag -Mnomain' ;;
+       ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
+         tmp_addflag=' -i_dynamic' ;;
+       efc*,ia64* | ifort*,ia64*)      # Intel Fortran compiler on ia64
+         tmp_addflag=' -i_dynamic -nofor_main' ;;
+       ifc* | ifort*)                  # Intel Fortran compiler
+         tmp_addflag=' -nofor_main' ;;
+       lf95*)                          # Lahey Fortran 8.1
+         _LT_TAGVAR(whole_archive_flag_spec, $1)=
+         tmp_sharedflag='--shared' ;;
+       xl[[cC]]*)                      # IBM XL C 8.0 on PPC (deal with xlf below)
+         tmp_sharedflag='-qmkshrobj'
+         tmp_addflag= ;;
+       esac
+       case `$CC -V 2>&1 | sed 5q` in
+       *Sun\ C*)                       # Sun C 5.9
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(compiler_needs_object, $1)=yes
+         tmp_sharedflag='-G' ;;
+       *Sun\ F*)                       # Sun Fortran 8.3
+         tmp_sharedflag='-G' ;;
+       esac
+       _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+
+        if test "x$supports_anon_versioning" = xyes; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+           cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+           echo "local: *; };" >> $output_objdir/$libname.ver~
+           $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+        fi
+
+       case $cc_basename in
+       xlf*)
+         # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+         _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
+         _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
+         if test "x$supports_anon_versioning" = xyes; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+             cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+             echo "local: *; };" >> $output_objdir/$libname.ver~
+             $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+         fi
+         ;;
+       esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+       wlarc=
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+       ;;
+       *)
+         # For security reasons, it is highly recommended that you always
+         # use absolute paths for naming shared libraries, and exclude the
+         # DT_RUNPATH tag from executables and libraries.  But doing so
+         # requires that you compile everything twice, which is a pain.
+         if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+         else
+           _LT_TAGVAR(ld_shlibs, $1)=no
+         fi
+       ;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
+       # Neither direct hardcoding nor static linking is supported with a
+       # broken collect2.
+       _LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test "$host_cpu" = ia64; then
+       # On IA64, the linker does run time linking by default, so we don't
+       # have to do anything special.
+       aix_use_runtimelinking=no
+       exp_sym_flag='-Bexport'
+       no_entry_flag=""
+      else
+       # If we're using GNU nm, then we don't want the "-C" option.
+       # -C means demangle to AIX nm, but means don't demangle with GNU nm
+       if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       else
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+       fi
+       aix_use_runtimelinking=no
+
+       # Test if we are trying to use run time linking or normal
+       # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+       # need to do runtime linking.
+       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+         for ld_flag in $LDFLAGS; do
+         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+           aix_use_runtimelinking=yes
+           break
+         fi
+         done
+         ;;
+       esac
+
+       exp_sym_flag='-bexport'
+       no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+      if test "$GCC" = yes; then
+       case $host_os in aix4.[[012]]|aix4.[[012]].*)
+       # We only want to do this on AIX 4.2 and lower, the check
+       # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+          strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+         # We have reworked collect2
+         :
+         else
+         # We have old collect2
+         _LT_TAGVAR(hardcode_direct, $1)=unsupported
+         # It fails to find uninstalled libraries when the uninstalled
+         # path is not listed in the libpath.  Setting hardcode_minus_L
+         # to unsupported forces relinking
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+         ;;
+       esac
+       shared_flag='-shared'
+       if test "$aix_use_runtimelinking" = yes; then
+         shared_flag="$shared_flag "'${wl}-G'
+       fi
+       _LT_TAGVAR(link_all_deplibs, $1)=no
+      else
+       # not using gcc
+       if test "$host_cpu" = ia64; then
+       # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+       # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+       else
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag='${wl}-G'
+         else
+           shared_flag='${wl}-bM:SRE'
+         fi
+       fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test "$aix_use_runtimelinking" = yes; then
+       # Warning - without using the other runtime loading flags (-brtl),
+       # -berok will link without error, but may produce a broken library.
+       _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+      else
+       if test "$host_cpu" = ia64; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+         _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+       else
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+         # Warning - without using the other run time loading flags,
+         # -berok will link without error, but may produce a broken library.
+         _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+         # Exported symbols can be pulled into shared objects from archives
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+         # This is similar to how AIX traditionally builds its shared libraries.
+         _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+       fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      # Tell ltmain to make .lib files, not .a files.
+      libext=lib
+      # Tell ltmain to make .dll files, not .so files.
+      shrext_cmds=".dll"
+      # FIXME: Setting linknames here is a bad hack.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+      # The linker will automatically build a .lib file if we build a DLL.
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+      # FIXME: Should let the user specify the lib program.
+      _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+      _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    freebsd1*)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+      ;;
+
+    hpux10*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # hardcode_minus_L: Not really in the search PATH,
+       # but as the default location of the library.
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      else
+       case $host_cpu in
+       hppa*64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       ia64*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       esac
+      fi
+      if test "$with_gnu_ld" = no; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+       case $host_cpu in
+       hppa*64*|ia64*)
+         _LT_TAGVAR(hardcode_direct, $1)=no
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         ;;
+       *)
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+
+         # hardcode_minus_L: Not really in the search PATH,
+         # but as the default location of the library.
+         _LT_TAGVAR(hardcode_minus_L, $1)=yes
+         ;;
+       esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       # Try to use the -exported_symbol ld option, if it does not
+       # work, assume that -exports_file does not work either and
+       # implicitly export all symbols.
+        save_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+        AC_LINK_IFELSE(int foo(void) {},
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+        )
+        LDFLAGS="$save_LDFLAGS"
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    netbsd* | netbsdelf*-gnu)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+       _LT_TAGVAR(hardcode_direct, $1)=yes
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       else
+         case $host_os in
+          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+            _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+            ;;
+          *)
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+            ;;
+         esac
+       fi
+      else
+       _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+      ;;
+
+    osf3*)
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)     # as osf3* with the addition of -msym flag
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      else
+       _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+       $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+
+       # Both c and cxx compiler support -rpath directly
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test "$GCC" = yes; then
+       wlarc='${wl}'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+       case `$CC -V 2>&1` in
+       *"Compilers 5.0"*)
+         wlarc=''
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+         ;;
+       *)
+         wlarc='${wl}'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+         $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+         ;;
+       esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+       # The compiler driver will combine and reorder linker options,
+       # but understands `-z linker_flag'.  GCC discards it without `$wl',
+       # but is careful enough not to reorder.
+       # Supported since Solaris 2.6 (maybe 2.5.1?)
+       if test "$GCC" = yes; then
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+       else
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+       fi
+       ;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test "x$host_vendor" = xsequent; then
+       # Use $CC to link under sequent, because it throws in some extra .o
+       # files that make .init and .fini sections work.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+       sni)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+       ;;
+       siemens)
+         ## LD is ld it makes a PLAMLIB
+         ## CC just makes a GrossModule.
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+         _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+       motorola)
+         _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+         _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+       ;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+       _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       runpath_var=LD_RUN_PATH
+       hardcode_runpath_var=yes
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We can NOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test "$GCC" = yes; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+       _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test x$host_vendor = xsni; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       ;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test "$enable_shared" = yes && test "$GCC" = yes; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+      $RM conftest*
+      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+        soname=conftest
+        lib=conftest
+        libobjs=conftest.$ac_objext
+        deplibs=
+        wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+       pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+        compiler_flags=-v
+        linker_flags=-v
+        verstring=
+        output_objdir=.
+        libname=conftest
+        lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+        _LT_TAGVAR(allow_undefined_flag, $1)=
+        if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+        then
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        else
+         _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+        fi
+        _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+      else
+        cat conftest.err 1>&5
+      fi
+      $RM conftest*
+      AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
+    [[If ld is used when linking, flag to hardcode $libdir into a binary
+    during linking.  This must work even if $libdir does not exist]])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting ${shlibpath_var} if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [fix_srcfile_path], [1],
+    [Fix the shell variable $srcfile for the compiler])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC="$CC"
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report which library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test "$can_build_shared" = "no" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test "$enable_shared" = yes && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+      test "$enable_shared" = yes && enable_static=no
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test "$enable_shared" = yes || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC="$lt_save_CC"
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_PROG_CXX
+# ------------
+# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
+# compiler, we have our own version here.
+m4_defun([_LT_PROG_CXX],
+[
+pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
+AC_PROG_CXX
+if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
+    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
+    (test "X$CXX" != "Xg++"))) ; then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_CXX
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_CXX], [])
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[AC_REQUIRE([_LT_PROG_CXX])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_caught_CXX_error" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test "$GXX" = yes; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test "$GXX" = yes; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test "$with_gnu_ld" = yes; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='${wl}'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if eval "`$CC -print-prog-name=ld` --help 2>&1" |
+         $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test "$host_cpu" = ia64; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=""
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # need to do runtime linking.
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+           for ld_flag in $LDFLAGS; do
+             case $ld_flag in
+             *-brtl*)
+               aix_use_runtimelinking=yes
+               break
+               ;;
+             esac
+           done
+           ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
+
+        if test "$GXX" = yes; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+         collect2name=`${CC} -print-prog-name=collect2`
+         if test -f "$collect2name" &&
+            strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+         then
+           # We have reworked collect2
+           :
+         else
+           # We have old collect2
+           _LT_TAGVAR(hardcode_direct, $1)=unsupported
+           # It fails to find uninstalled libraries when the uninstalled
+           # path is not listed in the libpath.  Setting hardcode_minus_L
+           # to unsupported forces relinking
+           _LT_TAGVAR(hardcode_minus_L, $1)=yes
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=
+         fi
+          esac
+          shared_flag='-shared'
+         if test "$aix_use_runtimelinking" = yes; then
+           shared_flag="$shared_flag "'${wl}-G'
+         fi
+        else
+          # not using gcc
+          if test "$host_cpu" = ia64; then
+         # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+         # chokes on -Wl,-G. The following line is correct:
+         shared_flag='-G'
+          else
+           if test "$aix_use_runtimelinking" = yes; then
+             shared_flag='${wl}-G'
+           else
+             shared_flag='${wl}-bM:SRE'
+           fi
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+       # export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+        if test "$aix_use_runtimelinking" = yes; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        else
+          if test "$host_cpu" = ia64; then
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
+           _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
+          else
+           # Determine the default libpath from the value encoded in an
+           # empty executable.
+           _LT_SYS_MODULE_PATH_AIX
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           # Warning - without using the other run time loading flags,
+           # -berok will link without error, but may produce a broken library.
+           _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
+           # Exported symbols can be pulled into shared objects from archives
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+           # This is similar to how AIX traditionally builds its shared
+           # libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
+          fi
+        fi
+        ;;
+
+      beos*)
+       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+         _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+         # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
+         # support --undefined.  This deserves some investigation.  FIXME
+         _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+         # FIXME: insert proper C++ library support
+         _LT_TAGVAR(ld_shlibs, $1)=no
+         ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+        # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+        # as there is no search path for DLLs.
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+        _LT_TAGVAR(always_export_symbols, $1)=no
+        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+        if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+          _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+          # If the export-symbols file already is a .def file (1st line
+          # is EXPORTS), use it as is; otherwise, prepend...
+          _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
+           cp $export_symbols $output_objdir/$soname.def;
+          else
+           echo EXPORTS > $output_objdir/$soname.def;
+           cat $export_symbols >> $output_objdir/$soname.def;
+          fi~
+          $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+        else
+          _LT_TAGVAR(ld_shlibs, $1)=no
+        fi
+        ;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+       ;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          ghcx*)
+           # Green Hills C++ Compiler
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      freebsd[[12]]*)
+        # C++ shared libraries reported to be fairly broken before
+       # switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      gnu*)
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                            # but as the default
+                                            # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+            ;;
+          *)
+            if test "$GXX" = yes; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test $with_gnu_ld = no; then
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+                                                # but as the default
+                                                # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          aCC*)
+           case $host_cpu in
+             hppa*64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             ia64*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+             *)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+               ;;
+           esac
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test $with_gnu_ld = no; then
+               case $host_cpu in
+                 hppa*64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 ia64*)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+                 *)
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   ;;
+               esac
+             fi
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+       # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+       # Instead, shared libraries are loaded at an image base (0x10000000 by
+       # default) and relocated if they conflict, which is a slow very memory
+       # consuming and fragmenting process.  To avoid this, we pick a random,
+       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       ;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+           # SGI C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+
+           # Archives containing C++ object files must be created using
+           # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+           ;;
+          *)
+           if test "$GXX" = yes; then
+             if test "$with_gnu_ld" = no; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+             else
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
+             fi
+           fi
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+           ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+
+           # Archives containing C++ object files must be created using
+           # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+           ;;
+         icpc* | ecpc* )
+           # Intel C++
+           with_gnu_ld=yes
+           # version 8.0 and above of icpc choke on multiply defined symbols
+           # if we add $predep_objects and $postdep_objects, however 7.1 and
+           # earlier do not add the objects themselves.
+           case `$CC -V 2>&1` in
+             *"Version 7."*)
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+             *)  # Version 8.0 or newer
+               tmp_idyn=
+               case $host_cpu in
+                 ia64*) tmp_idyn=' -i_dynamic';;
+               esac
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+               ;;
+           esac
+           _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+           case `$CC -V` in
+           *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
+             _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
+             _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+               $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
+               $RANLIB $oldlib'
+             _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+               $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           *) # Version 6 will use weak symbols
+             _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+             ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+            ;;
+         cxx*)
+           # Compaq C++
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname  -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
+
+           runpath_var=LD_RUN_PATH
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         xl*)
+           # IBM XL 8.0 on PPC, with GNU ld
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+           if test "x$supports_anon_versioning" = xyes; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+               cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+               echo "local: *; };" >> $output_objdir/$libname.ver~
+               $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
+           fi
+           ;;
+         *)
+           case `$CC -V 2>&1 | sed 5q` in
+           *Sun\ C*)
+             # Sun C++ 5.9
+             _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+             _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+             _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
+             _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+             # Not sure whether something based on
+             # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+             # would be better.
+             output_verbose_link_cmd='echo'
+
+             # Archives containing C++ object files must be created using
+             # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+             # necessary to make sure instantiated templates are included
+             # in the archive.
+             _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+             ;;
+           esac
+           ;;
+       esac
+       ;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+         *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+       esac
+       ;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+         _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+         wlarc=
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       fi
+       # Workaround some broken pre-1.5 toolchains
+       output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+       ;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+       ;;
+
+      openbsd2*)
+        # C++ shared libraries are fairly broken
+       _LT_TAGVAR(ld_shlibs, $1)=no
+       ;;
+
+      openbsd*)
+       if test -f /usr/libexec/ld.so; then
+         _LT_TAGVAR(hardcode_direct, $1)=yes
+         _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+         _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
+           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+         fi
+         output_verbose_link_cmd=echo
+       else
+         _LT_TAGVAR(ld_shlibs, $1)=no
+       fi
+       ;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+           # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+           # KCC will only create a shared library if the output file
+           # ends with ".so" (or ".sl" for HP-UX), so rename the library
+           # to its proper name (with version) after linking.
+           _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Archives containing C++ object files must be created using
+           # the KAI C++ compiler.
+           case $host in
+             osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+             *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+           esac
+           ;;
+          RCC*)
+           # Rational C++ 2.4.1
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          cxx*)
+           case $host in
+             osf3*)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+               ;;
+             *)
+               _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                 echo "-hidden">> $lib.exp~
+                 $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp  `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
+                 $RM $lib.exp'
+               _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+               ;;
+           esac
+
+           _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+           # Commands to make compiler produce verbose output that lists
+           # what "hidden" libraries, object files and flags are used when
+           # linking a shared library.
+           #
+           # There doesn't appear to be a way to prevent this compiler from
+           # explicitly linking system object files so we need to strip them
+           # from the output so that they don't get included in the library
+           # dependencies.
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
+           ;;
+         *)
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+             case $host in
+               osf3*)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+               *)
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 ;;
+             esac
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+             _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+             # Commands to make compiler produce verbose output that lists
+             # what "hidden" libraries, object files and flags are used when
+             # linking a shared library.
+             output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+
+           else
+             # FIXME: insert proper C++ library support
+             _LT_TAGVAR(ld_shlibs, $1)=no
+           fi
+           ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.x
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          lcc*)
+           # Lucid
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC*)
+           # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+           _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+             $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+           _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+           case $host_os in
+             solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+             *)
+               # The compiler driver will combine and reorder linker options,
+               # but understands `-z linker_flag'.
+               # Supported since Solaris 2.6 (maybe 2.5.1?)
+               _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+               ;;
+           esac
+           _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+           output_verbose_link_cmd='echo'
+
+           # Archives containing C++ object files must be created using
+           # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+           # necessary to make sure instantiated templates are included
+           # in the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+           ;;
+          gcx*)
+           # Green Hills C++ Compiler
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+
+           # The C++ compiler must be used to create the archive.
+           _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+           ;;
+          *)
+           # GNU C++ compiler with Solaris linker
+           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
+             _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
+             if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             else
+               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # platform.
+               _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                 $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+               # Commands to make compiler produce verbose output that lists
+               # what "hidden" libraries, object files and flags are used when
+               # linking a shared library.
+               output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
+             fi
+
+             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             case $host_os in
+               solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+               *)
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
+                 ;;
+             esac
+           fi
+           ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+       *)
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+         ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+       # Note: We can NOT use -z defs as we might desire, because we do not
+       # link with -lc, and that would cause any symbols used from libc to
+       # always be unresolved, which means just about no library would
+       # ever link correctly.  If we're not using GNU ld we use -z text
+       # though, which does catch some bad symbols but isn't as heavy-handed
+       # as -z defs.
+       _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+       _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
+       _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
+       _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+       _LT_TAGVAR(link_all_deplibs, $1)=yes
+       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
+       runpath_var='LD_RUN_PATH'
+
+       case $cc_basename in
+          CC*)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+         *)
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+           ;;
+       esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+           # NonStop-UX NCC 3.20
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+          *)
+           # FIXME: insert proper C++ library support
+           _LT_TAGVAR(ld_shlibs, $1)=no
+           ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)="$GXX"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test "$_lt_caught_CXX_error" != yes
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+])
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test $p = "-L" ||
+          test $p = "-R"; then
+        prev=$p
+        continue
+       else
+        prev=
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        case $p in
+        -L* | -R*)
+          # Internal compiler library paths should come after those
+          # provided the user.  The postdeps already come after the
+          # user supplied libs so there is no need to process them.
+          if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
+          else
+            _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
+          fi
+          ;;
+        # The "-l" case would never come before the object being
+        # linked, so don't bother handling this case.
+        esac
+       else
+        if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+        else
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+        fi
+       fi
+       ;;
+
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+        pre_test_object_deps_done=yes
+        continue
+       fi
+
+       if test "$pre_test_object_deps_done" = no; then
+        if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+          _LT_TAGVAR(predep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+        fi
+       else
+        if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+          _LT_TAGVAR(postdep_objects, $1)="$p"
+        else
+          _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+        fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+
+linux*)
+  case `$CC -V 2>&1 | sed 5q` in
+  *Sun\ C*)
+    # Sun C++ 5.9
+
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+
+solaris*)
+  case $cc_basename in
+  CC*)
+    # The more standards-conforming stlport4 library is
+    # incompatible with the Cstd library. Avoid specifying
+    # it if it's in CXXFLAGS. Ignore libCrun as
+    # -library=stlport4 depends on it.
+    case " $CXX $CXXFLAGS " in
+    *" -library=stlport4 "*)
+      solaris_use_stlport4=yes
+      ;;
+    esac
+
+    # Adding this requires a known-good setup of shared libraries for
+    # Sun compiler versions before 5.6, else PIC objects from an old
+    # archive will be linked into the output, leading to subtle bugs.
+    if test "$solaris_use_stlport4" != yes; then
+      _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
+    fi
+    ;;
+  esac
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_PROG_F77
+# ------------
+# Since AC_PROG_F77 is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_F77],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
+AC_PROG_F77
+if test -z "$F77" || test "X$F77" = "Xno"; then
+  _lt_disable_F77=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_F77
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_F77], [])
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_REQUIRE([_LT_PROG_F77])dnl
+AC_LANG_PUSH(Fortran 77)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_F77" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${F77-"f77"}
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$G77"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_F77" != yes
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_PROG_FC
+# -----------
+# Since AC_PROG_FC is broken, in that it returns the empty string
+# if there is no fortran compiler, we have our own version here.
+m4_defun([_LT_PROG_FC],
+[
+pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
+AC_PROG_FC
+if test -z "$FC" || test "X$FC" = "Xno"; then
+  _lt_disable_FC=yes
+fi
+popdef([AC_MSG_ERROR])
+])# _LT_PROG_FC
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([_LT_PROG_FC], [])
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_REQUIRE([_LT_PROG_FC])dnl
+AC_LANG_PUSH(Fortran)
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test "$_lt_disable_FC" != yes; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC="$CC"
+  lt_save_GCC=$GCC
+  CC=${FC-"f95"}
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test "$can_build_shared" = "no" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test "$enable_shared" = yes && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+       if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+         test "$enable_shared" = yes && enable_static=no
+       fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test "$enable_shared" = yes || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
+    _LT_TAGVAR(LD, $1)="$LD"
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC="$lt_save_CC"
+fi # test "$_lt_disable_FC" != yes
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)="$LD"
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC="$lt_save_CC"
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to `libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code="$lt_simple_compile_test_code"
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC="$CC"
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC="$lt_save_CC"
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f $lt_ac_sed && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test $lt_ac_count -gt 10 && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test $lt_ac_count -gt $lt_ac_max; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
+# Try some XSI features
+xsi_shell=no
+( _lt_dummy="a/b/c"
+  test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
+      = c,a/b,, \
+    && eval 'test $(( 1 + 1 )) -eq 2 \
+    && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
+  && xsi_shell=yes
+AC_MSG_RESULT([$xsi_shell])
+_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
+
+AC_MSG_CHECKING([whether the shell understands "+="])
+lt_shell_append=no
+( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
+    >/dev/null 2>&1 \
+  && lt_shell_append=yes
+AC_MSG_RESULT([$lt_shell_append])
+_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
+
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PROG_XSI_SHELLFNS
+# ---------------------
+# Bourne and XSI compatible variants of some useful shell functions.
+m4_defun([_LT_PROG_XSI_SHELLFNS],
+[case $xsi_shell in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result="${1##*/}"
+}
+
+# func_dirname_and_basename file append nondir_replacement
+# perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# Implementation must be kept synchronized with func_dirname
+# and func_basename. For efficiency, we do not delegate to
+# those functions but instead duplicate the functionality here.
+func_dirname_and_basename ()
+{
+  case ${1} in
+    */*) func_dirname_result="${1%/*}${2}" ;;
+    *  ) func_dirname_result="${3}" ;;
+  esac
+  func_basename_result="${1##*/}"
+}
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+func_stripname ()
+{
+  # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+  # positional parameters, so assign one to ordinary parameter first.
+  func_stripname_result=${3}
+  func_stripname_result=${func_stripname_result#"${1}"}
+  func_stripname_result=${func_stripname_result%"${2}"}
+}
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=${1%%=*}
+  func_opt_split_arg=${1#*=}
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  case ${1} in
+    *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
+    *)    func_lo2o_result=${1} ;;
+  esac
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=${1%.*}.lo
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=$(( $[*] ))
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=${#1}
+}
+
+_LT_EOF
+    ;;
+  *) # Bourne compatible functions.
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_dirname file append nondir_replacement
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+func_dirname ()
+{
+  # Extract subdirectory from the argument.
+  func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
+  if test "X$func_dirname_result" = "X${1}"; then
+    func_dirname_result="${3}"
+  else
+    func_dirname_result="$func_dirname_result${2}"
+  fi
+}
+
+# func_basename file
+func_basename ()
+{
+  func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
+}
+
+dnl func_dirname_and_basename
+dnl A portable version of this function is already defined in general.m4sh
+dnl so there is no need for it here.
+
+# func_stripname prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+# func_strip_suffix prefix name
+func_stripname ()
+{
+  case ${2} in
+    .*) func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
+    *)  func_stripname_result=`$ECHO "X${3}" \
+           | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
+  esac
+}
+
+# sed scripts:
+my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
+my_sed_long_arg='1s/^-[[^=]]*=//'
+
+# func_opt_split
+func_opt_split ()
+{
+  func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
+  func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
+}
+
+# func_lo2o object
+func_lo2o ()
+{
+  func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
+}
+
+# func_xform libobj-or-source
+func_xform ()
+{
+  func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
+}
+
+# func_arith arithmetic-term...
+func_arith ()
+{
+  func_arith_result=`expr "$[@]"`
+}
+
+# func_len string
+# STRING may not start with a hyphen.
+func_len ()
+{
+  func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
+}
+
+_LT_EOF
+esac
+
+case $lt_shell_append in
+  yes)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]+=\$[2]"
+}
+_LT_EOF
+    ;;
+  *)
+    cat << \_LT_EOF >> "$cfgfile"
+
+# func_append var value
+# Append VALUE to the end of shell variable VAR.
+func_append ()
+{
+  eval "$[1]=\$$[1]\$[2]"
+}
+
+_LT_EOF
+    ;;
+  esac
+])
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644 (file)
index 0000000..34151a3
--- /dev/null
@@ -0,0 +1,368 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option `$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+           [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+                     [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl `shared' nor `disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+                  [_LT_ENABLE_FAST_INSTALL])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [0], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the `shared' and
+# `disable-shared' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+       [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_shared=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+       [Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the `static' and
+# `disable-static' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+       [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_static=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+       [Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the `fast-install'
+# and `disable-fast-install' LT_INIT options.
+# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      for pkg in $enableval; do
+       IFS="$lt_save_ifs"
+       if test "X$pkg" = "X$p"; then
+         enable_fast_install=yes
+       fi
+      done
+      IFS="$lt_save_ifs"
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+        [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the `disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# LT_INIT options.
+# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic],
+       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [pic_mode="$withval"],
+    [pic_mode=default])
+
+test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the `pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+                [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+                [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+                [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+                [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+                [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644 (file)
index 0000000..9000a05
--- /dev/null
@@ -0,0 +1,123 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file 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.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59 which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+          m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+            [m4_foreach([_Lt_suffix],
+               ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+       [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+         [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+                [lt_append([$1], [$2], [$3])$4],
+                [$5])],
+         [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+       m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+       [$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+                     [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644 (file)
index 0000000..f3c5309
--- /dev/null
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers                      -*- Autoconf -*-
+#
+#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file 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.
+
+# Generated from ltversion.in.
+
+# serial 3017 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.2.6b])
+m4_define([LT_PACKAGE_REVISION], [1.3017])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.2.6b'
+macro_revision='1.3017'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644 (file)
index 0000000..637bb20
--- /dev/null
@@ -0,0 +1,92 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file 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.
+
+# serial 4 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. 
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],  [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],             [AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],        [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],         [AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],    [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],           [AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],             [AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],    [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],           [AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],       [AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],               [AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],        [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],    [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],    [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],         [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],            [AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],  [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],             [AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],            [AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],    [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],   [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],          [AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],            [AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],           [AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],  [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],    [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],          [AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],          [AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],                [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],     [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],          [AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],   [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],           [AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],           [AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],           [AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_RC],             [AC_DEFUN([AC_LIBTOOL_RC])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],  [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],      [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],    [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],    [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],        [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],    [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],     [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],         [AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],       [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
new file mode 100644 (file)
index 0000000..0048a3f
--- /dev/null
+++ b/m4/pkg.m4
@@ -0,0 +1,157 @@
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright Â© 2004 Scott James Remnant <scott@netsplit.com>.
+#
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+               
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+                        [pkg_failed=yes])
+    fi
+else
+       pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+               [AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+       ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+               [$4])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/m4/update-header-version.m4 b/m4/update-header-version.m4
new file mode 100644 (file)
index 0000000..a128d18
--- /dev/null
@@ -0,0 +1,24 @@
+# update-header-version.m4 serial 1
+dnl Copyright (C) 2008, 2010 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+
+# sj_UPDATE_HEADER_VERSION(HEADER-FILE)
+# -------------
+# Update version number in HEADER-FILE.  It searches for '_VERSION ".*"'
+# and replaces the .* part with the $PACKAGE_VERSION.
+AC_DEFUN([sj_UPDATE_HEADER_VERSION],
+[
+  # Update version number in lib/libtasn1.h.
+  if ! sed 's/_VERSION ".*"/_VERSION "'$PACKAGE_VERSION'"/' $1 > fixhdr.tmp; then
+    AC_MSG_ERROR([[*** Failed to update version number in $1...]])
+  fi
+  if cmp -s $1 fixhdr.tmp 2>/dev/null; then
+    rm -f fixhdr.tmp
+  elif ! mv fixhdr.tmp $1; then
+    AC_MSG_ERROR([[*** Failed to move fixhdr.tmp to $1...]])
+  fi
+])
diff --git a/maint.mk b/maint.mk
new file mode 100644 (file)
index 0000000..3bcab0c
--- /dev/null
+++ b/maint.mk
@@ -0,0 +1,1202 @@
+# -*-Makefile-*-
+# This Makefile fragment tries to be general-purpose enough to be
+# used by many projects via the gnulib maintainer-makefile module.
+
+## Copyright (C) 2001-2010 Free Software Foundation, Inc.
+##
+## 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/>.
+
+# This is reported not to work with make-3.79.1
+# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+ME := maint.mk
+
+# Override this in cfg.mk if you use a non-standard build-aux directory.
+build_aux ?= $(srcdir)/build-aux
+
+# Do not save the original name or timestamp in the .tar.gz file.
+# Use --rsyncable if available.
+gzip_rsyncable := \
+  $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable)
+GZIP_ENV = '--no-name --best $(gzip_rsyncable)'
+
+GIT = git
+VC = $(GIT)
+VC-tag = git tag -s -m '$(VERSION)' -u '$(gpg_key_ID)'
+
+VC_LIST = $(build_aux)/vc-list-files -C $(srcdir)
+
+# You can override this variable in cfg.mk to set your own regexp
+# matching files to ignore.
+VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$
+
+# This is to preprocess robustly the output of $(VC_LIST), so that even
+# when $(srcdir) is a pathological name like "....", the leading sed command
+# removes only the intended prefix.
+_dot_escaped_srcdir = $(subst .,\.,$(srcdir))
+
+# Post-process $(VC_LIST) output, prepending $(srcdir)/, but only
+# when $(srcdir) is not ".".
+ifeq ($(srcdir),.)
+_prepend_srcdir_prefix =
+else
+_prepend_srcdir_prefix = | sed 's|^|$(srcdir)/|'
+endif
+
+# In order to be able to consistently filter "."-relative names,
+# (i.e., with no $(srcdir) prefix), this definition is careful to
+# remove any $(srcdir) prefix, and to restore what it removes.
+VC_LIST_EXCEPT = \
+  $(VC_LIST) | sed 's|^$(_dot_escaped_srcdir)/||' \
+       | if test -f $(srcdir)/.x-$@; then grep -vEf $(srcdir)/.x-$@; \
+         else grep -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \
+       | grep -Ev -e '$(VC_LIST_ALWAYS_EXCLUDE_REGEX)' \
+       $(_prepend_srcdir_prefix)
+
+ifeq ($(origin prev_version_file), undefined)
+  prev_version_file = $(srcdir)/.prev-version
+endif
+
+PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null)
+VERSION_REGEXP = $(subst .,\.,$(VERSION))
+PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION))
+
+ifeq ($(VC),$(GIT))
+this-vc-tag = v$(VERSION)
+this-vc-tag-regexp = v$(VERSION_REGEXP)
+else
+tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]')
+tag-this-version = $(subst .,_,$(VERSION))
+this-vc-tag = $(tag-package)-$(tag-this-version)
+this-vc-tag-regexp = $(this-vc-tag)
+endif
+my_distdir = $(PACKAGE)-$(VERSION)
+
+# Old releases are stored here.
+release_archive_dir ?= ../release
+
+# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right.
+# Use alpha.gnu.org for alpha and beta releases.
+# Use ftp.gnu.org for stable releases.
+gnu_ftp_host-alpha = alpha.gnu.org
+gnu_ftp_host-beta = alpha.gnu.org
+gnu_ftp_host-stable = ftp.gnu.org
+gnu_rel_host ?= $(gnu_ftp_host-$(RELEASE_TYPE))
+
+ifeq ($(gnu_rel_host),ftp.gnu.org)
+url_dir_list ?= http://ftpmirror.gnu.org/$(PACKAGE)
+else
+url_dir_list ?= ftp://$(gnu_rel_host)/gnu/$(PACKAGE)
+endif
+
+# Override this in cfg.mk if you are using a different format in your
+# NEWS file.
+today = $(shell date +%Y-%m-%d)
+news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)'
+
+# Prevent programs like 'sort' from considering distinct strings to be equal.
+# Doing it here saves us from having to set LC_ALL elsewhere in this file.
+export LC_ALL = C
+
+## --------------- ##
+## Sanity checks.  ##
+## --------------- ##
+
+_cfg_mk := $(shell test -f $(srcdir)/cfg.mk && echo '$(srcdir)/cfg.mk')
+
+# Collect the names of rules starting with `sc_'.
+syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' \
+                       $(srcdir)/$(ME) $(_cfg_mk)))
+.PHONY: $(syntax-check-rules)
+
+local-checks-available = \
+  $(syntax-check-rules)
+.PHONY: $(local-checks-available)
+
+# Arrange to print the name of each syntax-checking rule just before running it.
+$(syntax-check-rules): %: %.m
+sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules))
+.PHONY: $(sc_m_rules_)
+$(sc_m_rules_):
+       @echo $(patsubst sc_%.m, %, $@)
+       @date +%s.%N > .sc-start-$(basename $@)
+
+# Compute and print the elapsed time for each syntax-check rule.
+sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules))
+.PHONY: $(sc_z_rules_)
+$(sc_z_rules_): %.z: %
+       @end=$$(date +%s.%N);                                           \
+       start=$$(cat .sc-start-$*);                                     \
+       rm -f .sc-start-$*;                                             \
+       awk -v s=$$start -v e=$$end                                     \
+         'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null
+
+# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper
+# that computes and prints elapsed time.
+local-check :=                                                         \
+  $(patsubst sc_%, sc_%.z,                                             \
+    $(filter-out $(local-checks-to-skip), $(local-checks-available)))
+
+syntax-check: $(local-check)
+
+# _sc_search_regexp
+#
+# This macro searches for a given construct in the selected files and
+# then takes some action.
+#
+# Parameters (shell variables):
+#
+#  prohibit | require
+#
+#     Regular expression (ERE) denoting either a forbidden construct
+#     or a required construct.  Those arguments are exclusive.
+#
+#  in_vc_files | in_files
+#
+#     grep-E-style regexp denoting the files to check.  If no files
+#     are specified the default are all the files that are under
+#     version control.
+#
+#  containing | non_containing
+#
+#     Select the files (non) containing strings matching this regexp.
+#     If both arguments are specified then CONTAINING takes
+#     precedence.
+#
+#  with_grep_options
+#
+#     Extra options for grep.
+#
+#  ignore_case
+#
+#     Ignore case.
+#
+#  halt
+#
+#     Message to display before to halting execution.
+
+# By default, _sc_search_regexp does not ignore case.
+export ignore_case =
+_ignore_case = $$(test -n "$$ignore_case" && echo -i || :)
+
+define _sc_say_and_exit
+   dummy=; : so we do not need a semicolon before each use;            \
+   { echo -e "$(ME): $$msg" 1>&2; exit 1; };
+endef
+
+# _sc_search_regexp used to be named _prohibit_regexp.  However,
+# upgrading to the new definition and leaving the old name undefined
+# would usually convert each custom rule using $(_prohibit_regexp)
+# (usually defined in cfg.mk) into a no-op.  This definition ensures
+# that people know right away if they're still using the old name.
+# FIXME: remove in 2012.
+_prohibit_regexp = \
+  $(error '*** you need to s/_prohibit_regexp/_sc_search_regexp/, and adapt')
+
+define _sc_search_regexp
+   dummy=; : so we do not need a semicolon before each use;            \
+                                                                       \
+   : Check arguments;                                                  \
+   test -n "$$prohibit" && test -n "$$require"                         \
+     && { msg='Cannot specify both prohibit and require'               \
+          $(_sc_say_and_exit) } || :;                                  \
+   test -z "$$prohibit" && test -z "$$require"                         \
+     && { msg='Should specify either prohibit or require'              \
+          $(_sc_say_and_exit) } || :;                                  \
+   test -n "$$in_vc_files" && test -n "$$in_files"                     \
+     && { msg='Cannot specify both in_vc_files and in_files'           \
+          $(_sc_say_and_exit) } || :;                                  \
+   test "x$$halt" != x                                                 \
+     || { msg='halt not defined' $(_sc_say_and_exit) };                        \
+                                                                       \
+   : Filter by file name;                                              \
+   if test -n "$$in_files"; then                                       \
+     files=$$(find $(srcdir) | grep -E "$$in_files");                  \
+   else                                                                        \
+     files=$$($(VC_LIST_EXCEPT));                                      \
+     if test -n "$$in_vc_files"; then                                  \
+       files=$$(echo "$$files" | grep -E "$$in_vc_files");             \
+     fi;                                                               \
+   fi;                                                                 \
+                                                                       \
+   : Filter by content;                                                        \
+   test -n "$$files" && test -n "$$containing"                         \
+     && { files=$$(grep -l "$$containing" $$files); } || :;            \
+   test -n "$$files" && test -n "$$non_containing"                     \
+     && { files=$$(grep -vl "$$non_containing" $$files); } || :;       \
+                                                                       \
+   : Check for the construct;                                          \
+   if test -n "$$files"; then                                          \
+     if test -n "$$prohibit"; then                                     \
+       grep $$with_grep_options $(_ignore_case) -nE "$$prohibit" $$files \
+         && { msg="$$halt" $(_sc_say_and_exit) } || :;                 \
+     else                                                              \
+       grep $$with_grep_options $(_ignore_case) -LE "$$require" $$files \
+           | grep .                                                    \
+         && { msg="$$halt" $(_sc_say_and_exit) } || :;                 \
+     fi                                                                        \
+   else :;                                                             \
+   fi || :;
+endef
+
+sc_avoid_if_before_free:
+       @$(build_aux)/useless-if-before-free                            \
+               $(useless_free_options)                                 \
+           $$($(VC_LIST_EXCEPT) | grep -v useless-if-before-free) &&   \
+         { echo '$(ME): found useless "if" before "free" above' 1>&2;  \
+           exit 1; } || :
+
+sc_cast_of_argument_to_free:
+       @prohibit='\<free *\( *\(' halt='don'\''t cast free argument'   \
+         $(_sc_search_regexp)
+
+sc_cast_of_x_alloc_return_value:
+       @prohibit='\*\) *x(m|c|re)alloc\>'                              \
+       halt='don'\''t cast x*alloc return value'                       \
+         $(_sc_search_regexp)
+
+sc_cast_of_alloca_return_value:
+       @prohibit='\*\) *alloca\>'                                      \
+       halt='don'\''t cast alloca return value'                        \
+         $(_sc_search_regexp)
+
+sc_space_tab:
+       @prohibit='[ ]  '                                               \
+       halt='found SPACE-TAB sequence; remove the SPACE'               \
+         $(_sc_search_regexp)
+
+# Don't use *scanf or the old ato* functions in `real' code.
+# They provide no error checking mechanism.
+# Instead, use strto* functions.
+sc_prohibit_atoi_atof:
+       @prohibit='\<([fs]?scanf|ato([filq]|ll)) *\('                           \
+       halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q'   \
+         $(_sc_search_regexp)
+
+# Use STREQ rather than comparing strcmp == 0, or != 0.
+sc_prohibit_strcmp:
+       @grep -nE '! *str''cmp *\(|\<str''cmp *\([^)]+\) *=='           \
+           $$($(VC_LIST_EXCEPT))                                       \
+         | grep -vE ':# *define STREQ\(' &&                            \
+         { echo '$(ME): use STREQ in place of the above uses of str''cmp' \
+               1>&2; exit 1; } || :
+
+# Pass EXIT_*, not number, to usage, exit, and error (when exiting)
+# Convert all uses automatically, via these two commands:
+# git grep -l '\<exit *(1)' \
+#  | grep -vEf .x-sc_prohibit_magic_number_exit \
+#  | xargs --no-run-if-empty \
+#      perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/'
+# git grep -l '\<exit *(0)' \
+#  | grep -vEf .x-sc_prohibit_magic_number_exit \
+#  | xargs --no-run-if-empty \
+#      perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/'
+sc_prohibit_magic_number_exit:
+       @prohibit='(^|[^.])\<(usage|exit) ?\([0-9]|\<error ?\([1-9][0-9]*,'     \
+       halt='use EXIT_* values rather than magic number'                       \
+         $(_sc_search_regexp)
+
+# Using EXIT_SUCCESS as the first argument to error is misleading,
+# since when that parameter is 0, error does not exit.  Use `0' instead.
+sc_error_exit_success:
+       @prohibit='error *\(EXIT_SUCCESS,'                              \
+       in_vc_files='\.[chly]$$'                                        \
+       halt='found error (EXIT_SUCCESS'                                \
+        $(_sc_search_regexp)
+
+# `FATAL:' should be fully upper-cased in error messages
+# `WARNING:' should be fully upper-cased, or fully lower-cased
+sc_error_message_warn_fatal:
+       @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT))              \
+           | grep -E '"Warning|"Fatal|"fatal' &&                       \
+         { echo '$(ME): use FATAL, WARNING or warning' 1>&2;           \
+           exit 1; } || :
+
+# Error messages should not start with a capital letter
+sc_error_message_uppercase:
+       @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT))              \
+           | grep -E '"[A-Z]'                                          \
+           | grep -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' &&           \
+         { echo '$(ME): found capitalized error message' 1>&2;         \
+           exit 1; } || :
+
+# Error messages should not end with a period
+sc_error_message_period:
+       @grep -nEA2 '[^rp]error *\(' $$($(VC_LIST_EXCEPT))              \
+           | grep -E '[^."]\."' &&                                     \
+         { echo '$(ME): found error message ending in period' 1>&2;    \
+           exit 1; } || :
+
+sc_file_system:
+       @prohibit=file''system                                          \
+       ignore_case=1                                                   \
+       halt='found use of "file''system"; spell it "file system"'      \
+         $(_sc_search_regexp)
+
+# Don't use cpp tests of this symbol.  All code assumes config.h is included.
+sc_prohibit_have_config_h:
+       @prohibit='^# *if.*HAVE''_CONFIG_H'                             \
+       halt='found use of HAVE''_CONFIG_H; remove'                     \
+         $(_sc_search_regexp)
+
+# Nearly all .c files must include <config.h>.  However, we also permit this
+# via inclusion of a package-specific header, if cfg.mk specified one.
+# config_h_header must be suitable for grep -E.
+config_h_header ?= <config\.h>
+sc_require_config_h:
+       @require='^# *include $(config_h_header)'                       \
+       in_vc_files='\.c$$'                                             \
+       halt='the above files do not include <config.h>'                \
+         $(_sc_search_regexp)
+
+# You must include <config.h> before including any other header file.
+# This can possibly be via a package-specific header, if given by cfg.mk.
+sc_require_config_h_first:
+       @if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then       \
+         fail=0;                                                       \
+         for i in $$($(VC_LIST_EXCEPT) | grep '\.c$$'); do             \
+           grep '^# *include\>' $$i | sed 1q                           \
+               | grep -E '^# *include $(config_h_header)' > /dev/null  \
+             || { echo $$i; fail=1; };                                 \
+         done;                                                         \
+         test $$fail = 1 &&                                            \
+           { echo '$(ME): the above files include some other header'   \
+               'before <config.h>' 1>&2; exit 1; } || :;               \
+       else :;                                                         \
+       fi
+
+sc_prohibit_HAVE_MBRTOWC:
+       @prohibit='\bHAVE_MBRTOWC\b'                                    \
+       halt="do not use $$prohibit; it is always defined"              \
+         $(_sc_search_regexp)
+
+# To use this "command" macro, you must first define two shell variables:
+# h: the header, enclosed in <> or ""
+# re: a regular expression that matches IFF something provided by $h is used.
+define _sc_header_without_use
+  dummy=; : so we do not need a semicolon before each use;             \
+  h_esc=`echo "$$h"|sed 's/\./\\\\./g'`;                               \
+  if $(VC_LIST_EXCEPT) | grep -l '\.c$$' > /dev/null; then             \
+    files=$$(grep -l '^# *include '"$$h_esc"                           \
+            $$($(VC_LIST_EXCEPT) | grep '\.c$$')) &&                   \
+    grep -LE "$$re" $$files | grep . &&                                        \
+      { echo "$(ME): the above files include $$h but don't use it"     \
+       1>&2; exit 1; } || :;                                           \
+  else :;                                                              \
+  fi
+endef
+
+# Prohibit the inclusion of assert.h without an actual use of assert.
+sc_prohibit_assert_without_use:
+       @h='<assert.h>' re='\<assert *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of close-stream.h without an actual use.
+sc_prohibit_close_stream_without_use:
+       @h='"close-stream.h"' re='\<close_stream *\(' $(_sc_header_without_use)
+
+# Prohibit the inclusion of getopt.h without an actual use.
+sc_prohibit_getopt_without_use:
+       @h='<getopt.h>' re='\<getopt(_long)? *\(' $(_sc_header_without_use)
+
+# Don't include quotearg.h unless you use one of its functions.
+sc_prohibit_quotearg_without_use:
+       @h='"quotearg.h"' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use)
+
+# Don't include quote.h unless you use one of its functions.
+sc_prohibit_quote_without_use:
+       @h='"quote.h"' re='\<quote(_n)? *\(' $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_long_options_without_use:
+       @h='"long-options.h"' re='\<parse_long_options *\(' \
+         $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_inttostr_without_use:
+       @h='"inttostr.h"' re='\<(off|[iu]max|uint)tostr *\(' \
+         $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_ignore_value_without_use:
+       @h='"ignore-value.h"' re='\<ignore_(value|ptr) *\(' \
+         $(_sc_header_without_use)
+
+# Don't include this header unless you use one of its functions.
+sc_prohibit_error_without_use:
+       @h='"error.h"' \
+       re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\
+         $(_sc_header_without_use)
+
+# Don't include xalloc.h unless you use one of its functions.
+# Consider these symbols:
+# perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__';
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h
+# Divide into two sets on case, and filter each through this:
+# | sort | perl -MRegexp::Assemble -le \
+#  'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g'
+# Note this was produced by the above:
+# _xa1 = \
+#x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup)
+# But we can do better, in at least two ways:
+# 1) take advantage of two "dup"-suffixed strings:
+# x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup)
+# 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable
+# "char|[cmz]"
+# x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup)
+_xa2 = X([CZ]|N?M)ALLOC
+sc_prohibit_xalloc_without_use:
+       @h='"xalloc.h"' \
+       re='\<($(_xa1)|$(_xa2)) *\('\
+         $(_sc_header_without_use)
+
+# Extract function names:
+# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h
+_hash_re = \
+clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning
+_hash_fn = \<($(_hash_re)) *\(
+_hash_struct = (struct )?\<[Hh]ash_(table|tuning)\>
+sc_prohibit_hash_without_use:
+       @h='"hash.h"' \
+       re='$(_hash_fn)|$(_hash_struct)'\
+         $(_sc_header_without_use)
+
+sc_prohibit_hash_pjw_without_use:
+       @h='"hash-pjw.h"' \
+       re='\<hash_pjw *\(' \
+         $(_sc_header_without_use)
+
+sc_prohibit_safe_read_without_use:
+       @h='"safe-read.h"' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \
+         $(_sc_header_without_use)
+
+sc_prohibit_argmatch_without_use:
+       @h='"argmatch.h"' \
+       re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<argmatch(_exit_fn|_(in)?valid) *\()' \
+         $(_sc_header_without_use)
+
+sc_prohibit_canonicalize_without_use:
+       @h='"canonicalize.h"' \
+       re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode)' \
+         $(_sc_header_without_use)
+
+sc_prohibit_root_dev_ino_without_use:
+       @h='"root-dev-ino.h"' \
+       re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \
+         $(_sc_header_without_use)
+
+sc_prohibit_openat_without_use:
+       @h='"openat.h"' \
+       re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat)\>' \
+         $(_sc_header_without_use)
+
+# Prohibit the inclusion of c-ctype.h without an actual use.
+ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
+|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
+sc_prohibit_c_ctype_without_use:
+       @h='[<"]c-ctype.h[">]' re='\<c_($(ctype_re)) *\(' \
+         $(_sc_header_without_use)
+
+_empty =
+_sp = $(_empty) $(_empty)
+# The following list was generated by running:
+# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \
+#   | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt
+_sig_functions = \
+  bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \
+  sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \
+  siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \
+  sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo
+_sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions)))
+# The following were extracted from "man signal.h" manually.
+_sig_types_and_consts =                                                        \
+  MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK          \
+  SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL           \
+  SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE   \
+  SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \
+  sigstack sigval stack_t ucontext_t
+# generated via this:
+# perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70
+_sig_names =                                                           \
+  SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT     \
+  SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL      \
+  SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \
+  SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR     \
+  SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS  \
+  SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1       \
+  SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW      \
+  SIGXCPU SIGXFSZ
+_sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts)))
+
+# Prohibit the inclusion of signal.h without an actual use.
+sc_prohibit_signal_without_use:
+       @h='<signal.h>'                                                 \
+       re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>'          \
+         $(_sc_header_without_use)
+
+# Prohibit the inclusion of strings.h without a sensible use.
+# Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible.
+sc_prohibit_strings_without_use:
+       @h='<strings.h>'                                                \
+       re='\<(strn?casecmp|ffs(ll)?)\>'                                \
+         $(_sc_header_without_use)
+
+# Get the list of symbol names with this:
+# perl -lne '/^# *define (\w+)\(/ and print $1' lib/intprops.h|grep -v '^s'|fmt
+_intprops_names =                                                      \
+  TYPE_IS_INTEGER TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT            \
+  TYPE_SIGNED_MAGNITUDE TYPE_SIGNED TYPE_MINIMUM TYPE_MAXIMUM          \
+  INT_STRLEN_BOUND INT_BUFSIZE_BOUND
+_intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names)))
+# Prohibit the inclusion of intprops.h without an actual use.
+sc_prohibit_intprops_without_use:
+       @h='"intprops.h"'                                               \
+       re='\<($(_intprops_syms_re)) *\('                               \
+         $(_sc_header_without_use)
+
+sc_obsolete_symbols:
+       @prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>'                     \
+       halt='do not use HAVE''_FCNTL_H or O'_NDELAY                    \
+         $(_sc_search_regexp)
+
+# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ
+
+# Each nonempty ChangeLog line must start with a year number, or a TAB.
+sc_changelog:
+       @prohibit='^[^12        ]'                                      \
+       in_vc_files='^ChangeLog$$'                                      \
+       halt='found unexpected prefix in a ChangeLog'                   \
+         $(_sc_search_regexp)
+
+# Ensure that each .c file containing a "main" function also
+# calls set_program_name.
+sc_program_name:
+       @require='set_program_name *\(m?argv\[0\]\);'                   \
+       in_vc_files='\.c$$'                                             \
+       containing='^main *('                                           \
+       halt='the above files do not call set_program_name'             \
+         $(_sc_search_regexp)
+
+# Require that the final line of each test-lib.sh-using test be this one:
+# Exit $fail
+# Note: this test requires GNU grep's --label= option.
+Exit_witness_file ?= tests/test-lib.sh
+Exit_base := $(notdir $(Exit_witness_file))
+sc_require_test_exit_idiom:
+       @if test -f $(srcdir)/$(Exit_witness_file); then                \
+         die=0;                                                        \
+         for i in $$(grep -l -F 'srcdir/$(Exit_base)'                  \
+               $$($(VC_LIST) tests)); do                               \
+           tail -n1 $$i | grep '^Exit .' > /dev/null                   \
+             && : || { die=1; echo $$i; }                              \
+         done;                                                         \
+         test $$die = 1 &&                                             \
+           { echo 1>&2 '$(ME): the final line in each of the above is not:'; \
+             echo 1>&2 'Exit something';                               \
+             exit 1; } || :;                                           \
+       fi
+
+sc_the_the:
+       @prohibit='\<the ''the\>'                                       \
+       ignore_case=1                                                   \
+       halt='found use of "the ''the";'                                \
+         $(_sc_search_regexp)
+
+sc_trailing_blank:
+       @prohibit='[     ]$$'                                           \
+       halt='found trailing blank(s)'                                  \
+         $(_sc_search_regexp)
+
+# Match lines like the following, but where there is only one space
+# between the options and the description:
+#   -D, --all-repeated[=delimit-method]  print all duplicate lines\n
+longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)?
+sc_two_space_separator_in_usage:
+       @prohibit='^   *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$'         \
+       halt='help2man requires at least two spaces between an option and its description'\
+         $(_sc_search_regexp)
+
+# Look for diagnostics that aren't marked for translation.
+# This won't find any for which error's format string is on a separate line.
+sc_unmarked_diagnostics:
+       @grep -nE                                                       \
+           '\<error *\([^"]*"[^"]*[a-z]{3}' $$($(VC_LIST_EXCEPT))      \
+         | grep -v '_''(' &&                                           \
+         { echo '$(ME): found unmarked diagnostic(s)' 1>&2;            \
+           exit 1; } || :
+
+# Avoid useless parentheses like those in this example:
+# #if defined (SYMBOL) || defined (SYM2)
+sc_useless_cpp_parens:
+       @prohibit='^# *if .*defined *\('                                \
+       halt='found useless parentheses in cpp directive'               \
+         $(_sc_search_regexp)
+
+# List headers for which HAVE_HEADER_H is always true, assuming you are
+# using the appropriate gnulib module.  CAUTION: for each "unnecessary"
+# #if HAVE_HEADER_H that you remove, be sure that your project explicitly
+# requires the gnulib module that guarantees the usability of that header.
+gl_assured_headers_ = \
+  cd $(gnulib_dir)/lib && echo *.in.h|sed 's/\.in\.h//g'
+
+# Convert the list of names to upper case, and replace each space with "|".
+az_ = abcdefghijklmnopqrstuvwxyz
+AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ
+gl_header_upper_case_or_ =                                             \
+  $$($(gl_assured_headers_)                                            \
+    | tr $(az_)/.- $(AZ_)___                                           \
+    | tr -s ' ' '|'                                                    \
+    )
+sc_prohibit_always_true_header_tests:
+       @or=$(gl_header_upper_case_or_);                                \
+       re="HAVE_($$or)_H";                                             \
+       prohibit='\<'"$$re"'\>'                                         \
+       halt='do not test the above HAVE_<header>_H symbol(s);\n'\
+'  with the corresponding gnulib module, they are always true'         \
+         $(_sc_search_regexp)
+
+# ==================================================================
+gl_other_headers_ ?= \
+  intprops.h   \
+  openat.h     \
+  stat-macros.h
+
+# Perl -lne code to extract "significant" cpp-defined symbols from a
+# gnulib header file, eliminating a few common false-positives.
+gl_extract_significant_defines_ = \
+  /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\
+    && $$2 !~ /(?:rpl_|_used_without_)/\
+    && $$1 !~ /^(?:NSIG|ATTRIBUTE_NORETURN)$$/\
+    and print $$1
+
+# Create a list of regular expressions matching the names
+# of macros that are guaranteed to be defined by parts of gnulib.
+define def_sym_regex
+       gen_h=$(gl_generated_headers_);                                 \
+       (cd $(gnulib_dir)/lib;                                          \
+         for f in *.in.h $(gl_other_headers_); do                      \
+           perl -lne '$(gl_extract_significant_defines_)' $$f;         \
+         done;                                                         \
+       ) | sort -u                                                     \
+         | sed 's/^/^ *# *define /;s/$$/\\>/'
+endef
+
+# Don't define macros that we already get from gnulib header files.
+sc_prohibit_always-defined_macros:
+       @if test -d $(gnulib_dir); then                                 \
+         case $$(echo all: | grep -l -f - Makefile) in Makefile);; *)  \
+           echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \
+         esac;                                                         \
+         $(def_sym_regex) | grep -f - $$($(VC_LIST_EXCEPT))            \
+           && { echo '$(ME): define the above via some gnulib .h file' \
+                 1>&2;  exit 1; } || :;                                \
+       fi
+# ==================================================================
+
+# Prohibit checked in backup files.
+sc_prohibit_backup_files:
+       @$(VC_LIST) | grep '~$$' &&                             \
+         { echo '$(ME): found version controlled backup file' 1>&2;    \
+           exit 1; } || :
+
+# Require the latest GPL.
+sc_GPL_version:
+       @prohibit='either ''version [^3]'                               \
+       halt='GPL vN, N!=3'                                             \
+         $(_sc_search_regexp)
+
+# Require the latest GFDL.  Two regexp, since some .texi files end up
+# line wrapping between 'Free Documentation License,' and 'Version'.
+_GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any)
+sc_GFDL_version:
+       @prohibit='$(_GFDL_regexp)'                                     \
+       halt='GFDL vN, N!=3'                                            \
+         $(_sc_search_regexp)
+
+# Don't use Texinfo @acronym{} as it is not a good idea.
+texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$
+sc_texinfo_acronym:
+       @prohibit='@acronym\{'                                          \
+       in_vc_files='$(texinfo_suffix_re_)'                             \
+       halt='found use of Texinfo @acronym{}'                          \
+         $(_sc_search_regexp)
+
+cvs_keywords = \
+  Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State
+
+sc_prohibit_cvs_keyword:
+       @prohibit='\$$($(cvs_keywords))\$$'                             \
+       halt='do not use CVS keyword expansion'                         \
+         $(_sc_search_regexp)
+
+# This Perl code is slightly obfuscated.  Not only is each "$" doubled
+# because it's in a Makefile, but the $$c's are comments;  we cannot
+# use "#" due to the way the script ends up concatenated onto one line.
+# It would be much more concise, and would produce better output (including
+# counts) if written as:
+#   perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ...
+# but that would be far less efficient, reading the entire contents
+# of each file, rather than just the last two bytes of each.
+#
+# This is a perl script that is expected to be the single-quoted argument
+# to a command-line "-le".  The remaining arguments are file names.
+# Print the name of each file that ends in two or more newline bytes.
+# Exit nonzero if at least one such file is found, otherwise, exit 0.
+# Warn about, but otherwise ignore open failure.  Ignore seek/read failure.
+#
+# Use this if you want to remove trailing empty lines from selected files:
+#   perl -pi -0777 -e 's/\n\n+$/\n/' files...
+#
+detect_empty_lines_at_EOF_ =                                           \
+  foreach my $$f (@ARGV)                                               \
+    {                                                                  \
+      open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next;    \
+      my $$p = sysseek (F, -2, 2);                                     \
+      my $$c = "seek failure probably means file has < 2 bytes; ignore"; \
+      my $$last_two_bytes;                                             \
+      defined $$p and $$p = sysread F, $$last_two_bytes, 2;            \
+      close F;                                                         \
+      $$c = "ignore read failure";                                     \
+      $$p && $$last_two_bytes eq "\n\n" and (print $$f), $$fail=1;     \
+    }                                                                  \
+  END { exit defined $$fail }
+sc_prohibit_empty_lines_at_EOF:
+       @perl -le '$(detect_empty_lines_at_EOF_)' $$($(VC_LIST_EXCEPT)) \
+          || { echo '$(ME): the above files end with empty line(s)'     \
+               1>&2; exit 1; } || :;                                   \
+
+# Make sure we don't use st_blocks.  Use ST_NBLOCKS instead.
+# This is a bit of a kludge, since it prevents use of the string
+# even in comments, but for now it does the job with no false positives.
+sc_prohibit_stat_st_blocks:
+       @prohibit='[.>]st_blocks'                                       \
+       halt='do not use st_blocks; use ST_NBLOCKS'                     \
+         $(_sc_search_regexp)
+
+# Make sure we don't define any S_IS* macros in src/*.c files.
+# They're already defined via gnulib's sys/stat.h replacement.
+sc_prohibit_S_IS_definition:
+       @prohibit='^ *# *define  *S_IS'                                 \
+       halt='do not define S_IS* macros; include <sys/stat.h>'         \
+         $(_sc_search_regexp)
+
+_ptm1 = use "test C1 && test C2", not "test C1 -''a C2"
+_ptm2 = use "test C1 || test C2", not "test C1 -''o C2"
+# Using test's -a and -o operators is not portable.
+# We prefer test over [, since the latter is spelled [[ in configure.ac.
+sc_prohibit_test_minus_ao:
+       @prohibit='(\<test| \[+) .+ -[ao] '                             \
+       halt='$(_ptm1); $(_ptm2)'                                       \
+         $(_sc_search_regexp)
+
+# Each program that uses proper_name_utf8 must link with one of the
+# ICONV libraries.  Otherwise, some ICONV library must appear in LDADD.
+# The perl -0777 invocation below extracts the possibly-multi-line
+# definition of LDADD from the appropriate Makefile.am and exits 0
+# when it contains "ICONV".
+sc_proper_name_utf8_requires_ICONV:
+       @progs=$$(grep -l 'proper_name_utf8 ''("' $$($(VC_LIST_EXCEPT)));\
+       if test "x$$progs" != x; then                                   \
+         fail=0;                                                       \
+         for p in $$progs; do                                          \
+           dir=$$(dirname "$$p");                                      \
+           perl -0777                                                  \
+             -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)'  \
+             $$dir/Makefile.am && continue;                            \
+           base=$$(basename "$$p" .c);                                 \
+           grep "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \
+             || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \
+         done;                                                         \
+         test $$fail = 1 &&                                            \
+           { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \
+             exit 1; } || :;                                           \
+       fi
+
+# Warn about "c0nst struct Foo const foo[]",
+# but not about "char const *const foo" or "#define const const".
+sc_redundant_const:
+       @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b'          \
+       halt='redundant "const" in declarations'                        \
+         $(_sc_search_regexp)
+
+sc_const_long_option:
+       @grep '^ *static.*struct option ' $$($(VC_LIST_EXCEPT))         \
+         | grep -Ev 'const struct option|struct option const' && {     \
+             echo 1>&2 '$(ME): add "const" to the above declarations'; \
+             exit 1; } || :
+
+NEWS_hash =                                                            \
+  $$(sed -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p'             \
+       $(srcdir)/NEWS                                                  \
+     | perl -0777 -pe                                                  \
+       's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms'       \
+     | md5sum -                                                                \
+     | sed 's/ .*//')
+
+# Ensure that we don't accidentally insert an entry into an old NEWS block.
+sc_immutable_NEWS:
+       @if test -f $(srcdir)/NEWS; then                                \
+         test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : ||              \
+           { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \
+       fi
+
+# Update the hash stored above.  Do this after each release and
+# for any corrections to old entries.
+update-NEWS-hash: NEWS
+       perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \
+         $(srcdir)/cfg.mk
+
+# Ensure that we use only the standard $(VAR) notation,
+# not @...@ in Makefile.am, now that we can rely on automake
+# to emit a definition for each substituted variable.
+# We use perl rather than "grep -nE ..." to exempt a single
+# use of an @...@-delimited variable name in src/Makefile.am.
+# Allow the package to add exceptions via a hook in cfg.mk;
+# for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by
+# setting this to ' && !/PRAGMA_SYSTEM_HEADER/'.
+_makefile_at_at_check_exceptions ?=
+sc_makefile_at_at_check:
+       @perl -ne '/\@[A-Z_0-9]+\@/'$(_makefile_at_at_check_exceptions) \
+         -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}'    \
+           $$($(VC_LIST_EXCEPT) | grep -E '(^|/)Makefile\.am$$')       \
+         && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || :
+
+news-check: NEWS
+       if head $(srcdir)/NEWS | grep -E $(news-check-regexp)           \
+           >/dev/null; then                                            \
+         :;                                                            \
+       else                                                            \
+         echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2;      \
+         exit 1;                                                       \
+       fi
+
+sc_makefile_TAB_only_indentation:
+       @prohibit='^    [ ]{8}'                                         \
+       in_vc_files='akefile|\.mk$$'                                    \
+       halt='found TAB-8-space indentation'                            \
+         $(_sc_search_regexp)
+
+sc_m4_quote_check:
+       @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]'              \
+       in_vc_files='(^configure\.ac|\.m4)$$'                           \
+       halt='quote the first arg to AC_DEF*'                           \
+         $(_sc_search_regexp)
+
+fix_po_file_diag = \
+'you have changed the set of files with translatable diagnostics;\n\
+apply the above patch\n'
+
+# Verify that all source files using _() are listed in po/POTFILES.in.
+po_file = po/POTFILES.in
+sc_po_check:
+       @if test -f $(po_file); then                                    \
+         grep -E -v '^(#|$$)' $(po_file)                               \
+           | grep -v '^src/false\.c$$' | sort > $@-1;                  \
+         files=;                                                       \
+         for file in $$($(VC_LIST_EXCEPT)) lib/*.[ch]; do              \
+           test -r $$file || continue;                                 \
+           case $$file in                                              \
+             *.m4|*.mk) continue ;;                                    \
+             *.?|*.??) ;;                                              \
+             *) continue;;                                             \
+           esac;                                                       \
+           case $$file in                                              \
+           *.[ch])                                                     \
+             base=`expr " $$file" : ' \(.*\)\..'`;                     \
+             { test -f $$base.l || test -f $$base.y; } && continue;;   \
+           esac;                                                       \
+           files="$$files $$file";                                     \
+         done;                                                         \
+         grep -E -l '\b(N?_|gettext *)\([^)"]*("|$$)' $$files          \
+           | sort -u > $@-2;                                           \
+         diff -u -L $(po_file) -L $(po_file) $@-1 $@-2                 \
+           || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; };   \
+         rm -f $@-1 $@-2;                                              \
+       fi
+
+# Sometimes it is useful to change the PATH environment variable
+# in Makefiles.  When doing so, it's better not to use the Unix-centric
+# path separator of `:', but rather the automake-provided `$(PATH_SEPARATOR)'.
+msg = '$(ME): Do not use `:'\'' above; use $$(PATH_SEPARATOR) instead'
+sc_makefile_path_separator_check:
+       @prohibit='PATH[=].*:'                                          \
+       in_vc_files='akefile|\.mk$$'                                    \
+       halt=$(msg)                                                     \
+         $(_sc_search_regexp)
+
+# Check that `make alpha' will not fail at the end of the process.
+writable-files:
+       if test -d $(release_archive_dir); then :; else                 \
+         for file in $(distdir).tar.gz                                 \
+                     $(release_archive_dir)/$(distdir).tar.gz; do      \
+           test -e $$file || continue;                                 \
+           test -w $$file                                              \
+             || { echo ERROR: $$file is not writable; fail=1; };       \
+         done;                                                         \
+         test "$$fail" && exit 1 || : ;                                \
+       fi
+
+v_etc_file = lib/version-etc.c
+sample-test = tests/sample-test
+texi = doc/$(PACKAGE).texi
+# Make sure that the copyright date in $(v_etc_file) is up to date.
+# Do the same for the $(sample-test) and the main doc/.texi file.
+sc_copyright_check:
+       @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };'            \
+       in_files=$(v_etc_file)                                          \
+       halt='out of date copyright in $(v_etc_file); update it'        \
+         $(_sc_search_regexp)
+       @require='# Copyright \(C\) '$$(date +%Y)' Free'                \
+       in_vc_files=$(sample-test)                                      \
+       halt='out of date copyright in $(sample-test); update it'       \
+         $(_sc_search_regexp)
+       @require='Copyright @copyright\{\} .*'$$(date +%Y)' Free'       \
+       in_vc_files=$(texi)                                             \
+       halt='out of date copyright in $(texi); update it'              \
+         $(_sc_search_regexp)
+
+# If tests/help-version exists and seems to be new enough, assume that its
+# use of init.sh and path_prepend_ is correct, and ensure that every other
+# use of init.sh is identical.
+# This is useful because help-version cross-checks prog --version
+# with $(VERSION), which verifies that its path_prepend_ invocation
+# sets PATH correctly.  This is an inexpensive way to ensure that
+# the other init.sh-using tests also get it right.
+_hv_file ?= $(srcdir)/tests/help-version
+_hv_regex_weak ?= ^ *\. .*/init\.sh"
+_hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh"
+sc_cross_check_PATH_usage_in_tests:
+       @if test -f $(_hv_file); then                                   \
+         grep -l 'VERSION mismatch' $(_hv_file) >/dev/null             \
+           || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2;    \
+                exit 0; };                                             \
+         grep -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null         \
+           || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \
+                exit 1; };                                             \
+         good=$$(grep -E '$(_hv_regex_strong)' $(_hv_file));           \
+         grep -LFx "$$good"                                            \
+               $$(grep -lE '$(_hv_regex_weak)' $$($(VC_LIST_EXCEPT)))  \
+             | grep . &&                                               \
+           { echo "$(ME): the above files use path_prepend_ inconsistently" \
+               1>&2; exit 1; } || :;                                   \
+       fi
+
+# #if HAVE_... will evaluate to false for any non numeric string.
+# That would be flagged by using -Wundef, however gnulib currently
+# tests many undefined macros, and so we can't enable that option.
+# So at least preclude common boolean strings as macro values.
+sc_Wundef_boolean:
+       @prohibit='^#define.*(yes|no|true|false)$$'                     \
+       in_files='$(CONFIG_INCLUDE)'                                    \
+       halt='Use 0 or 1 for macro values'                              \
+         $(_sc_search_regexp)
+
+sc_vulnerable_makefile_CVE-2009-4029:
+       @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \
+       in_files=$$(find $(srcdir) -name Makefile.in)                   \
+       halt='the above files are vulnerable; beware of running\n'\
+'"make dist*" rules, and upgrade to fixed automake\n'\
+'see http://bugzilla.redhat.com/542609 for details'                    \
+         $(_sc_search_regexp)
+
+vc-diff-check:
+       (unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || :
+       if test -s vc-diffs; then                               \
+         cat vc-diffs;                                         \
+         echo "Some files are locally modified:" 1>&2;         \
+         exit 1;                                               \
+       else                                                    \
+         rm vc-diffs;                                          \
+       fi
+
+rel-files = $(DIST_ARCHIVES)
+
+gnulib_dir ?= $(srcdir)/gnulib
+gnulib-version = $$(cd $(gnulib_dir) && git describe)
+bootstrap-tools ?= autoconf,automake,gnulib
+
+# If it's not already specified, derive the GPG key ID from
+# the signed tag we've just applied to mark this release.
+gpg_key_ID ?= \
+  $$(git cat-file tag v$(VERSION) > .ann-sig \
+     && gpgv .ann-sig - < /dev/null 2>&1 \
+         | sed -n '/.*key ID \([0-9A-F]*\)/s//\1/p'; rm -f .ann-sig)
+
+translation_project_ ?= coordinator@translationproject.org
+announcement_Cc_ ?= $(translation_project_), $(PACKAGE_BUGREPORT)
+announcement_mail_headers_ ?=                                          \
+To: info-gnu@gnu.org                                                   \
+Cc: $(announcement_Cc_)                                                        \
+Mail-Followup-To: $(PACKAGE_BUGREPORT)
+
+announcement: NEWS ChangeLog $(rel-files)
+       @$(build_aux)/announce-gen                                      \
+           --mail-headers='$(announcement_mail_headers_)'              \
+           --release-type=$(RELEASE_TYPE)                              \
+           --package=$(PACKAGE)                                        \
+           --prev=$(PREV_VERSION)                                      \
+           --curr=$(VERSION)                                           \
+           --gpg-key-id=$(gpg_key_ID)                                  \
+           --news=$(srcdir)/NEWS                                       \
+           --bootstrap-tools=$(bootstrap-tools)                        \
+           --gnulib-version=$(gnulib-version)                          \
+           --no-print-checksums                                        \
+           $(addprefix --url-dir=, $(url_dir_list))
+
+## ---------------- ##
+## Updating files.  ##
+## ---------------- ##
+
+ftp-gnu = ftp://ftp.gnu.org/gnu
+www-gnu = http://www.gnu.org
+
+upload_dest_dir_ ?= $(PACKAGE)
+emit_upload_commands:
+       @echo =====================================
+       @echo =====================================
+       @echo "$(build_aux)/gnupload $(GNUPLOADFLAGS) \\"
+       @echo "    --to $(gnu_rel_host):$(upload_dest_dir_) \\"
+       @echo "  $(rel-files)"
+       @echo '# send the ~/announce-$(my_distdir) e-mail'
+       @echo =====================================
+       @echo =====================================
+
+noteworthy = * Noteworthy changes in release ?.? (????-??-??) [?]
+define emit-commit-log
+  printf '%s\n' 'post-release administrivia' '' \
+    '* NEWS: Add header line for next release.' \
+    '* .prev-version: Record previous version.' \
+    '* cfg.mk (old_NEWS_hash): Auto-update.'
+endef
+
+.PHONY: no-submodule-changes
+no-submodule-changes:
+       if test -d $(srcdir)/.git; then                                 \
+         diff=$$(cd $(srcdir) && git submodule -q foreach              \
+                 git diff-index --name-only HEAD)                      \
+           || exit 1;                                                  \
+         case $$diff in '') ;;                                         \
+           *) echo '$(ME): submodule files are locally modified:';     \
+               echo "$$diff"; exit 1;; esac;                           \
+       else                                                            \
+         : ;                                                           \
+       fi
+
+.PHONY: alpha beta stable
+ALL_RECURSIVE_TARGETS += alpha beta stable
+alpha beta stable: $(local-check) writable-files no-submodule-changes
+       test $@ = stable                                                \
+         && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$'         \
+              || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\
+         || :
+       $(MAKE) vc-diff-check
+       $(MAKE) news-check
+       $(MAKE) distcheck
+       $(MAKE) dist XZ_OPT=-9ev
+       $(MAKE) $(release-prep-hook) RELEASE_TYPE=$@
+       $(MAKE) -s emit_upload_commands RELEASE_TYPE=$@
+
+# Override this in cfg.mk if you follow different procedures.
+release-prep-hook ?= release-prep
+
+.PHONY: release-prep
+release-prep:
+       case $$RELEASE_TYPE in alpha|beta|stable) ;; \
+         *) echo "invalid RELEASE_TYPE: $$RELEASE_TYPE" 1>&2; exit 1;; esac
+       $(MAKE) -s announcement > ~/announce-$(my_distdir)
+       if test -d $(release_archive_dir); then                 \
+         ln $(rel-files) $(release_archive_dir);               \
+         chmod a-w $(rel-files);                               \
+       fi
+       echo $(VERSION) > $(prev_version_file)
+       $(MAKE) update-NEWS-hash
+       perl -pi -e '$$. == 3 and print "$(noteworthy)\n\n\n"' NEWS
+       $(emit-commit-log) > .ci-msg
+       $(VC) commit -F .ci-msg -a
+       rm .ci-msg
+
+# Override this with e.g., -s $(srcdir)/some_other_name.texi
+# if the default $(PACKAGE)-derived name doesn't apply.
+gendocs_options_ ?=
+
+.PHONY: web-manual
+web-manual:
+       @test -z "$(manual_title)" \
+         && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
+       @cd '$(srcdir)/doc'; \
+         $(SHELL) ../build-aux/gendocs.sh $(gendocs_options_) \
+            -o '$(abs_builddir)/doc/manual' \
+            --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
+           "$(PACKAGE_NAME) - $(manual_title)"
+       @echo " *** Upload the doc/manual directory to web-cvs."
+
+# Code Coverage
+
+init-coverage:
+       $(MAKE) $(AM_MAKEFLAGS) clean
+       lcov --directory . --zerocounters
+
+COVERAGE_CCOPTS ?= "-g --coverage"
+COVERAGE_OUT ?= doc/coverage
+
+build-coverage:
+       $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS)
+       $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check
+       mkdir -p $(COVERAGE_OUT)
+       lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \
+               --capture
+
+gen-coverage:
+       genhtml --output-directory $(COVERAGE_OUT) \
+               $(COVERAGE_OUT)/$(PACKAGE).info \
+               --highlight --frames --legend \
+               --title "$(PACKAGE_NAME)"
+
+coverage: init-coverage build-coverage gen-coverage
+
+# Update gettext files.
+PACKAGE ?= $(shell basename $(PWD))
+PO_DOMAIN ?= $(PACKAGE)
+POURL = http://translationproject.org/latest/$(PO_DOMAIN)/
+PODIR ?= po
+refresh-po:
+       rm -f $(PODIR)/*.po && \
+       echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \
+       wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \
+       echo 'en@boldquot' > $(PODIR)/LINGUAS && \
+       echo 'en@quot' >> $(PODIR)/LINGUAS && \
+       ls $(PODIR)/*.po | sed 's/\.po//' | sed 's,$(PODIR)/,,' | sort >> $(PODIR)/LINGUAS
+
+ # Running indent once is not idempotent, but running it twice is.
+INDENT_SOURCES ?= $(C_SOURCES)
+.PHONY: indent
+indent:
+       indent $(INDENT_SOURCES)
+       indent $(INDENT_SOURCES)
+
+# If you want to set UPDATE_COPYRIGHT_* environment variables,
+# put the assignments in this variable.
+update-copyright-env ?=
+
+# Run this rule once per year (usually early in January)
+# to update all FSF copyright year lists in your project.
+# If you have an additional project-specific rule,
+# add it in cfg.mk along with a line 'update-copyright: prereq'.
+# By default, exclude all variants of COPYING; you can also
+# add exemptions (such as ChangeLog..* for rotated change logs)
+# in the file .x-update-copyright.
+.PHONY: update-copyright
+update-copyright:
+       grep -l -w Copyright                                             \
+         $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \
+         | $(update-copyright-env) xargs $(build_aux)/$@
diff --git a/packaging/libtasn1-1.3-pkgconfig.patch b/packaging/libtasn1-1.3-pkgconfig.patch
new file mode 100644 (file)
index 0000000..b06b5c4
--- /dev/null
@@ -0,0 +1,105 @@
+diff -up libtasn1-1.3/lib/libtasn1-config.in.~1~ libtasn1-1.3/lib/libtasn1-config.in
+--- libtasn1-1.3/lib/libtasn1-config.in.~1~    2008-02-01 17:14:52.000000000 +0100
++++ libtasn1-1.3/lib/libtasn1-config.in        2008-02-13 13:38:29.000000000 +0100
+@@ -1,12 +1,8 @@
+-#!/bin/sh
++#!/bin/bash
+-prefix=@prefix@
+-exec_prefix=@exec_prefix@
+ exec_prefix_set=no
+-tasn1_libs="@LIBTASN1_LIBS@"
+-tasn1_cflags="@LIBTASN1_CFLAGS@"
+-tasn1_la_file="@libdir@/libtasn1.la"
++pkgopts=()
+ usage()
+ {
+@@ -22,6 +19,11 @@ EOF
+       exit $1
+ }
++pkgcfg()
++{
++    ${PKG_CONFIG:-pkg-config} "${pkgopts[@]}" "$@" libtasn1
++}
++
+ if test $# -eq 0; then
+       usage 1 1>&2
+ fi
+@@ -34,23 +36,23 @@ while test $# -gt 0; do
+   case $1 in
+     --prefix=*)
+-      prefix=$optarg
++      pkgopts=( "${pkgopts[@]}" "--define-variable=prefix=$optarg" )
+       if test $exec_prefix_set = no ; then
+-      exec_prefix=$optarg
++        pkgopts=( "${pkgopts[@]}" "--define-variable=exec_prefix=$optarg" )
+       fi
+       ;;
+     --prefix)
+       echo_prefix=yes
+       ;;
+     --exec-prefix=*)
+-      exec_prefix=$optarg
++      pkgopts=( "${pkgopts[@]}" "--define-variable=exec_prefix=$optarg" )
+       exec_prefix_set=yes
+       ;;
+     --exec-prefix)
+       echo_exec_prefix=yes
+       ;;
+     --version)
+-      echo "@VERSION@"
++      pkgcfg --modversion
+       exit 0
+       ;;
+     --cflags)
+@@ -60,7 +62,8 @@ while test $# -gt 0; do
+       echo_libs=yes
+       ;;
+     --la-file)
+-      echo_la_file=yes
++      echo ".la file not shipped" >&2
++      exit 1
+       ;;
+     --help)
+       usage 0
+@@ -73,32 +76,17 @@ while test $# -gt 0; do
+ done
+ if test "$echo_prefix" = "yes"; then
+-    echo $prefix
++    pkgcfg --variable=prefix
+ fi
+ if test "$echo_exec_prefix" = "yes"; then
+-    echo $exec_prefix
++    pkgcfg --variable=exec_prefix
+ fi
+ if test "$echo_cflags" = "yes"; then
+-    if test "@includedir@" != "/usr/include" ; then
+-      includes="-I@includedir@"
+-      for i in $tasn1_cflags ; do
+-      if test "$i" = "-I@includedir@" ; then
+-        includes=""
+-      fi
+-      done
+-    fi
+-    echo $includes $tasn1_cflags
+-fi
+-
+-if test "$echo_la_file" = "yes"; then
+-    echo ${tasn1_la_file}
++    pkgcfg --cflags
+ fi
+ if test "$echo_libs" = "yes"; then
+-    echo ${tasn1_libs}
++    pkgcfg --libs
+ fi
+-
+-
+-
diff --git a/packaging/libtasn1.changes b/packaging/libtasn1.changes
new file mode 100644 (file)
index 0000000..aa39505
--- /dev/null
@@ -0,0 +1,24 @@
+* Fri Jul  9 2010 Yan Li <yan.i.li@intel.com> - 2.7
+- Updated to latest upstream release
+- Corrected license tags: the core library is LGPLv2.1+, only tools
+  sub-package is GPLv3+ (BMC#11589)
+
+* Sat Mar 06 2010 Anas Nashif <anas.nashif@intel.com> - 2.3
+- Fixed file list for info file
+
+* Sat Feb 27 2010 Anas Nashif <anas.nashif@intel.com> - 2.3
+- Updated with latest spectacle
+- Include YAML file in source rpm
+
+* Thu Nov 05 2009 PeterZhu <peter.j.zhu@intel.com> - 2.3
+- Remove /usr/share/info/dir in %install
+
+* Mon Sep 07 2009 Passion Zhao <passion.zhao@intel.com> - 2.3
+- Update to 2.3
+
+* Wed May 06 2009 Passion Zhao <passion.zhao@intel.com> 2.1
+- Update to 2.1
+
+* Wed Dec 17 2008 Arjan van de Ven <arjan@linux.intel.com> 1.4
+- Create standardized spec file
+
diff --git a/packaging/libtasn1.spec b/packaging/libtasn1.spec
new file mode 100644 (file)
index 0000000..56ebc9e
--- /dev/null
@@ -0,0 +1,82 @@
+Name:       libtasn1
+Summary:    This is the ASN.1 library used in GNUTLS
+Version:    2.7
+Release:    1
+Group:      System/Libraries
+License:    LGPLv2.1+
+URL:        http://www.gnu.org/software/gnutls/download.html
+Source0:    http://www.gnu.org/software/gnutls/releases/libtasn1/%{name}-%{version}.tar.gz
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
+BuildRequires:  bison
+
+
+%description
+This is the ASN.1 library used in GNUTLS.  More up to date information can
+be found at http://www.gnu.org/software/gnutls and http://www.gnutls.org
+
+
+
+%package tools
+Summary:    Some ASN.1 tools
+License:    GPLv3+
+Group:      Applications/Text
+Requires:   %{name} = %{version}-%{release}
+
+%description tools
+This is the ASN.1 library used in GNUTLS.  More up to date information can
+be found at http://www.gnu.org/software/gnutls and http://www.gnutls.org
+
+This package contains tools using the libtasn library.
+
+
+%package devel
+Summary:    Files for development of applications which will use libtasn1
+Group:      Development/Libraries
+Requires:   %{name} = %{version}-%{release}
+
+%description devel
+This is the ASN.1 library used in GNUTLS.  More up to date information can
+be found at http://www.gnu.org/software/gnutls and http://www.gnutls.org
+
+This package contains files for development of applications which will
+use libtasn1.
+
+
+
+%prep
+%setup -q -n %{name}-%{version}
+
+
+%build
+
+%configure --disable-static
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install 
+
+
+%remove_docs
+
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+
+%files
+%defattr(-,root,root,-)
+%{_libdir}/*.so.*
+
+
+%files tools
+%defattr(-,root,root,-)
+%_bindir/asn1*
+
+%files devel
+%defattr(-,root,root,-)
+%_libdir/*.so
+%_libdir/pkgconfig/*.pc
+%_includedir/*
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644 (file)
index 0000000..09133f6
--- /dev/null
@@ -0,0 +1,31 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_builddir)/gl
+
+LDADD = ../lib/libtasn1.la ../gl/libgnu.la
+
+bin_PROGRAMS = asn1Parser asn1Coding asn1Decoding
+
+asn1Parser_SOURCES = asn1Parser.c
+
+asn1Coding_SOURCES = asn1Coding.c
+
+asn1Decoding_SOURCES = asn1Decoding.c
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644 (file)
index 0000000..93bcab2
--- /dev/null
@@ -0,0 +1,914 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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@
+bin_PROGRAMS = asn1Parser$(EXEEXT) asn1Coding$(EXEEXT) \
+       asn1Decoding$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_asn1Coding_OBJECTS = asn1Coding.$(OBJEXT)
+asn1Coding_OBJECTS = $(am_asn1Coding_OBJECTS)
+asn1Coding_LDADD = $(LDADD)
+asn1Coding_DEPENDENCIES = ../lib/libtasn1.la ../gl/libgnu.la
+am_asn1Decoding_OBJECTS = asn1Decoding.$(OBJEXT)
+asn1Decoding_OBJECTS = $(am_asn1Decoding_OBJECTS)
+asn1Decoding_LDADD = $(LDADD)
+asn1Decoding_DEPENDENCIES = ../lib/libtasn1.la ../gl/libgnu.la
+am_asn1Parser_OBJECTS = asn1Parser.$(OBJEXT)
+asn1Parser_OBJECTS = $(am_asn1Parser_OBJECTS)
+asn1Parser_LDADD = $(LDADD)
+asn1Parser_DEPENDENCIES = ../lib/libtasn1.la ../gl/libgnu.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = $(asn1Coding_SOURCES) $(asn1Decoding_SOURCES) \
+       $(asn1Parser_SOURCES)
+DIST_SOURCES = $(asn1Coding_SOURCES) $(asn1Decoding_SOURCES) \
+       $(asn1Parser_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_builddir)/gl
+LDADD = ../lib/libtasn1.la ../gl/libgnu.la
+asn1Parser_SOURCES = asn1Parser.c
+asn1Coding_SOURCES = asn1Coding.c
+asn1Decoding_SOURCES = asn1Decoding.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 src/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu src/Makefile
+.PRECIOUS: 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):
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p || test -f $$p1; \
+         then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+asn1Coding$(EXEEXT): $(asn1Coding_OBJECTS) $(asn1Coding_DEPENDENCIES) 
+       @rm -f asn1Coding$(EXEEXT)
+       $(LINK) $(asn1Coding_OBJECTS) $(asn1Coding_LDADD) $(LIBS)
+asn1Decoding$(EXEEXT): $(asn1Decoding_OBJECTS) $(asn1Decoding_DEPENDENCIES) 
+       @rm -f asn1Decoding$(EXEEXT)
+       $(LINK) $(asn1Decoding_OBJECTS) $(asn1Decoding_LDADD) $(LIBS)
+asn1Parser$(EXEEXT): $(asn1Parser_OBJECTS) $(asn1Parser_DEPENDENCIES) 
+       @rm -f asn1Parser$(EXEEXT)
+       $(LINK) $(asn1Parser_OBJECTS) $(asn1Parser_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1Coding.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1Decoding.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asn1Parser.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+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
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+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-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+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-binPROGRAMS
+
+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 -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+       clean-generic clean-libtool ctags distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS 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-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-binPROGRAMS
+
+
+# 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/src/asn1Coding.c b/src/asn1Coding.c
new file mode 100644 (file)
index 0000000..4d86caf
--- /dev/null
@@ -0,0 +1,342 @@
+/* asn1Coding.c --- program to generate a DER coding of an ASN1 definition.
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#include <libtasn1.h>
+
+#include <progname.h>
+#include <version-etc.h>
+
+/* This feature is available in gcc versions 2.5 and later.  */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define ATTR_NO_RETRUN
+#else
+# define ATTR_NO_RETRUN __attribute__ ((__noreturn__))
+#endif
+
+ATTR_NO_RETRUN static void
+usage (int status)
+{
+  if (status != EXIT_SUCCESS)
+    fprintf (stderr, "Try `%s --help' for more information.\n", program_name);
+  else
+    {
+      printf ("\
+Usage: %s [OPTION] DEFINITIONS ASSIGNMENTS\n", program_name);
+      printf ("\
+Generates a DER encoding of ASN.1 DEFINITIONS file\n\
+and ASSIGNMENTS file with value assignments.\n\
+\n");
+      printf ("\
+Mandatory arguments to long options are mandatory for short options too.\n\
+  -c, --check           checks the syntax only\n\
+  -o, --output=FILE     output file\n\
+  -h, --help            display this help and exit\n\
+  -v, --version         output version information and exit\n");
+      emit_bug_reporting_address ();
+    }
+  exit (status);
+}
+
+#define ASSIGNMENT_SUCCESS 1
+#define ASSIGNMENT_ERROR   2
+#define ASSIGNMENT_EOF     3
+
+static int
+readAssignment (FILE * file, char *varName, char *value)
+{
+
+  int ret;
+
+  ret = fscanf (file, "%s", varName);
+  if (ret == EOF)
+    return ASSIGNMENT_EOF;
+  if (!strcmp (varName, "''"))
+    varName[0] = 0;
+
+  ret = fscanf (file, "%s", value);
+  if (ret == EOF)
+    return ASSIGNMENT_ERROR;
+
+  return ASSIGNMENT_SUCCESS;
+}
+
+static void
+createFileName (char *inputFileName, char **outputFileName)
+{
+  char *char_p, *slash_p, *dot_p;
+
+  /* searching the last '/' and '.' in inputFileAssignmentName */
+  char_p = inputFileName;
+  slash_p = inputFileName;
+  while ((char_p = strchr (char_p, '/')))
+    {
+      char_p++;
+      slash_p = char_p;
+    }
+
+  char_p = slash_p;
+  dot_p = inputFileName + strlen (inputFileName);
+
+  while ((char_p = strchr (char_p, '.')))
+    {
+      dot_p = char_p;
+      char_p++;
+    }
+
+  /* outputFileName= inputFileName + .out */
+  *outputFileName = (char *) malloc (dot_p - inputFileName + 1 +
+                                    strlen (".out"));
+  memcpy (*outputFileName, inputFileName, dot_p - inputFileName);
+  (*outputFileName)[dot_p - inputFileName] = 0;
+  strcat (*outputFileName, ".out");
+  return;
+}
+
+int
+main (int argc, char *argv[])
+{
+  static const struct option long_options[] = {
+    {"help", no_argument, 0, 'h'},
+    {"version", no_argument, 0, 'v'},
+    {"check", no_argument, 0, 'c'},
+    {"output", required_argument, 0, 'o'},
+    {0, 0, 0, 0}
+  };
+  int option_index = 0;
+  int option_result;
+  char *outputFileName = NULL;
+  char *inputFileAsnName = NULL;
+  char *inputFileAssignmentName = NULL;
+  int checkSyntaxOnly = 0;
+  ASN1_TYPE definitions = ASN1_TYPE_EMPTY;
+  ASN1_TYPE structure = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  int asn1_result = ASN1_SUCCESS;
+  FILE *outputFile;
+  FILE *inputFile;
+  char varName[1024];
+  char value[1024];
+  unsigned char *der = NULL;
+  int der_len;
+  int k;
+
+  set_program_name (argv[0]);
+
+  opterr = 0;                  /* disable error messages from getopt */
+
+  while (1)
+    {
+
+      option_result =
+       getopt_long (argc, argv, "hvco:", long_options, &option_index);
+
+      if (option_result == -1)
+       break;
+
+      switch (option_result)
+       {
+       case 'h':               /* HELP */
+         free (outputFileName);
+         usage (EXIT_SUCCESS);
+         break;
+       case 'v':               /* VERSION */
+         version_etc (stdout, program_name, PACKAGE, VERSION,
+                      "Fabio Fiorina", NULL);
+         free (outputFileName);
+         exit (0);
+         break;
+       case 'c':               /* CHECK SYNTAX */
+         checkSyntaxOnly = 1;
+         break;
+       case 'o':               /* OUTPUT */
+         outputFileName = (char *) malloc (strlen (optarg) + 1);
+         strcpy (outputFileName, optarg);
+         break;
+       case '?':               /* UNKNOW OPTION */
+         free (outputFileName);
+         fprintf (stderr,
+                  "asn1Coding: option '%s' not recognized or without argument.\n\n",
+                  argv[optind - 1]);
+         usage (EXIT_FAILURE);
+         break;
+       default:
+         fprintf (stderr,
+                  "asn1Coding: ?? getopt returned character code Ox%x ??\n",
+                  option_result);
+       }
+    }
+
+  if (optind == argc || optind == argc - 1)
+    {
+      free (outputFileName);
+      fprintf (stderr, "asn1Coding: input files missing\n");
+      usage (EXIT_FAILURE);
+    }
+
+  inputFileAsnName = (char *) malloc (strlen (argv[optind]) + 1);
+  strcpy (inputFileAsnName, argv[optind]);
+
+  inputFileAssignmentName = (char *) malloc (strlen (argv[optind + 1]) + 1);
+  strcpy (inputFileAssignmentName, argv[optind + 1]);
+
+  asn1_result =
+    asn1_parser2tree (inputFileAsnName, &definitions, errorDescription);
+
+  switch (asn1_result)
+    {
+    case ASN1_SUCCESS:
+      printf ("Parse: done.\n");
+      break;
+    case ASN1_FILE_NOT_FOUND:
+      printf ("asn1Coding: FILE %s NOT FOUND\n", inputFileAsnName);
+      break;
+    case ASN1_SYNTAX_ERROR:
+    case ASN1_IDENTIFIER_NOT_FOUND:
+    case ASN1_NAME_TOO_LONG:
+      printf ("asn1Coding: %s\n", errorDescription);
+      break;
+    default:
+      printf ("libtasn1 ERROR: %s\n", asn1_strerror (asn1_result));
+    }
+
+  if (asn1_result != ASN1_SUCCESS)
+    {
+      free (inputFileAsnName);
+      free (inputFileAssignmentName);
+      exit (1);
+    }
+
+
+  inputFile = fopen (inputFileAssignmentName, "r");
+
+  if (inputFile == NULL)
+    {
+      printf ("asn1Coding: file '%s' not found\n", inputFileAssignmentName);
+      free (inputFileAsnName);
+      free (inputFileAssignmentName);
+      exit (1);
+    }
+
+
+  printf ("\n");
+
+  while (readAssignment (inputFile, varName, value) == ASSIGNMENT_SUCCESS)
+    {
+      printf ("var=%s, value=%s\n", varName, value);
+      if (structure == ASN1_TYPE_EMPTY)
+       {
+         asn1_result = asn1_create_element (definitions, value, &structure);
+       }
+      else
+       asn1_result = asn1_write_value (structure, varName, value, 0);
+
+      if (asn1_result != ASN1_SUCCESS)
+       {
+         printf ("libtasn1 ERROR: %s\n", asn1_strerror (asn1_result));
+
+         asn1_delete_structure (&definitions);
+         asn1_delete_structure (&structure);
+
+         free (inputFileAsnName);
+         free (inputFileAssignmentName);
+
+         fclose (inputFile);
+         exit (1);
+       }
+    }
+  fclose (inputFile);
+
+  printf ("\n");
+  asn1_print_structure (stdout, structure, "", ASN1_PRINT_NAME_TYPE_VALUE);
+
+  der_len = 0;
+  asn1_result = asn1_der_coding (structure, "", der, &der_len,
+                                errorDescription);
+  if (asn1_result == ASN1_MEM_ERROR)
+    {
+      der = malloc (der_len);
+      asn1_result = asn1_der_coding (structure, "", der, &der_len,
+                                    errorDescription);
+    }
+  printf ("\nCoding: %s\n\n", asn1_strerror (asn1_result));
+  if (asn1_result != ASN1_SUCCESS)
+    {
+      printf ("asn1Coding: %s\n", errorDescription);
+
+      free (der);
+
+      asn1_delete_structure (&definitions);
+      asn1_delete_structure (&structure);
+
+      free (inputFileAsnName);
+      free (inputFileAssignmentName);
+
+      exit (1);
+    }
+
+  /* Print the 'Certificate1' DER encoding */
+  printf ("-----------------\nNumber of bytes=%i\n", der_len);
+  for (k = 0; k < der_len; k++)
+    printf ("%02x ", der[k]);
+  printf ("\n-----------------\n");
+
+  asn1_delete_structure (&definitions);
+  asn1_delete_structure (&structure);
+
+
+  if (outputFileName == NULL)
+    createFileName (inputFileAssignmentName, &outputFileName);
+
+  printf ("\nOutputFile=%s\n", outputFileName);
+
+  outputFile = fopen (outputFileName, "w");
+
+  if (outputFile == NULL)
+    {
+      printf ("asn1Coding: output file '%s' not available\n", outputFileName);
+      free (der);
+      free (inputFileAsnName);
+      free (inputFileAssignmentName);
+      free (outputFileName);
+      exit (1);
+    }
+
+  for (k = 0; k < der_len; k++)
+    fprintf (outputFile, "%c", der[k]);
+  fclose (outputFile);
+  printf ("\nWriting: done.\n");
+
+  free (der);
+
+  free (inputFileAsnName);
+  free (inputFileAssignmentName);
+  free (outputFileName);
+
+  exit (0);
+}
diff --git a/src/asn1Decoding.c b/src/asn1Decoding.c
new file mode 100644 (file)
index 0000000..d7e550d
--- /dev/null
@@ -0,0 +1,260 @@
+/* asn1Decoding.c ---  program to generate an ASN1 type from a DER coding.
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#include <libtasn1.h>
+
+#include <progname.h>
+#include <version-etc.h>
+#include <read-file.h>
+
+/* This feature is available in gcc versions 2.5 and later.  */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define ATTR_NO_RETRUN
+#else
+# define ATTR_NO_RETRUN __attribute__ ((__noreturn__))
+#endif
+
+ATTR_NO_RETRUN static void
+usage (int status)
+{
+  if (status != EXIT_SUCCESS)
+    fprintf (stderr, "Try `%s --help' for more information.\n", program_name);
+  else
+    {
+      printf ("\
+Usage: %s [OPTION] DEFINITIONS ENCODED ASN1TYPE\n", program_name);
+      printf ("\
+Decodes DER data in ENCODED file, for the ASN1TYPE element\n\
+described in ASN.1 DEFINITIONS file, and print decoded structures.\n\
+\n");
+      printf ("\
+  -c, --check           checks the syntax only\n\
+  -h, --help            display this help and exit\n\
+  -v, --version         output version information and exit\n");
+      emit_bug_reporting_address ();
+    }
+  exit (status);
+}
+
+int
+main (int argc, char *argv[])
+{
+  static const struct option long_options[] = {
+    {"help", no_argument, 0, 'h'},
+    {"version", no_argument, 0, 'v'},
+    {"check", no_argument, 0, 'c'},
+    {0, 0, 0, 0}
+  };
+  int option_index = 0;
+  int option_result;
+  char *inputFileAsnName = NULL;
+  char *inputFileDerName = NULL;
+  char *typeName = NULL;
+  int checkSyntaxOnly = 0;
+  ASN1_TYPE definitions = ASN1_TYPE_EMPTY;
+  ASN1_TYPE structure = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  int asn1_result = ASN1_SUCCESS;
+  unsigned char *der;
+  int der_len = 0;
+  /* FILE *outputFile; */
+
+  set_program_name (argv[0]);
+
+  opterr = 0;                  /* disable error messages from getopt */
+
+  while (1)
+    {
+
+      option_result =
+       getopt_long (argc, argv, "hvc", long_options, &option_index);
+
+      if (option_result == -1)
+       break;
+
+      switch (option_result)
+       {
+       case 'h':               /* HELP */
+         usage (EXIT_SUCCESS);
+         break;
+       case 'v':               /* VERSION */
+         version_etc (stdout, program_name, PACKAGE, VERSION,
+                      "Fabio Fiorina", NULL);
+         exit (0);
+         break;
+       case 'c':               /* CHECK SYNTAX */
+         checkSyntaxOnly = 1;
+         break;
+       case '?':               /* UNKNOW OPTION */
+         fprintf (stderr,
+                  "asn1Decoding: option '%s' not recognized or without argument.\n\n",
+                  argv[optind - 1]);
+         usage (EXIT_FAILURE);
+         break;
+       default:
+         fprintf (stderr,
+                  "asn1Decoding: ?? getopt returned character code Ox%x ??\n",
+                  option_result);
+       }
+    }
+
+  if (optind == argc || optind == argc - 1 || optind == argc - 2)
+    {
+      fprintf (stderr, "asn1Decoding: input files or ASN.1 type "
+              "name missing\n");
+      usage (EXIT_FAILURE);
+    }
+
+  inputFileAsnName = (char *) malloc (strlen (argv[optind]) + 1);
+  strcpy (inputFileAsnName, argv[optind]);
+
+  inputFileDerName = (char *) malloc (strlen (argv[optind + 1]) + 1);
+  strcpy (inputFileDerName, argv[optind + 1]);
+
+  typeName = (char *) malloc (strlen (argv[optind + 2]) + 1);
+  strcpy (typeName, argv[optind + 2]);
+
+  asn1_result =
+    asn1_parser2tree (inputFileAsnName, &definitions, errorDescription);
+
+  switch (asn1_result)
+    {
+    case ASN1_SUCCESS:
+      printf ("Parse: done.\n");
+      break;
+    case ASN1_FILE_NOT_FOUND:
+      printf ("asn1Decoding: FILE %s NOT FOUND\n", inputFileAsnName);
+      break;
+    case ASN1_SYNTAX_ERROR:
+    case ASN1_IDENTIFIER_NOT_FOUND:
+    case ASN1_NAME_TOO_LONG:
+      printf ("asn1Decoding: %s\n", errorDescription);
+      break;
+    default:
+      printf ("libtasn1 ERROR: %s\n", asn1_strerror (asn1_result));
+    }
+
+  if (asn1_result != ASN1_SUCCESS)
+    {
+      free (inputFileAsnName);
+      free (inputFileDerName);
+      free (typeName);
+      exit (1);
+    }
+
+
+  {
+    size_t tmplen;
+    der = (unsigned char *) read_binary_file (inputFileDerName, &tmplen);
+    der_len = tmplen;
+  }
+
+  if (der == NULL)
+    {
+      printf ("asn1Decoding: could not read '%s'\n", inputFileDerName);
+      asn1_delete_structure (&definitions);
+
+      free (inputFileAsnName);
+      free (inputFileDerName);
+      free (typeName);
+      exit (1);
+    }
+
+
+ /*****************************************/
+  /* ONLY FOR TEST                         */
+ /*****************************************/
+  /*
+     der_len=0;
+     outputFile=fopen("data.p12","w");
+     while(fscanf(inputFile,"%c",der+der_len) != EOF){
+     if((der_len>=0x11) && (der_len<=(0xe70)))
+     fprintf(outputFile,"%c",der[der_len]);
+     der_len++;
+     }
+     fclose(outputFile);
+     fclose(inputFile);
+   */
+
+  asn1_result = asn1_create_element (definitions, typeName, &structure);
+
+  /* asn1_print_structure(stdout,structure,"",ASN1_PRINT_ALL); */
+
+
+  if (asn1_result != ASN1_SUCCESS)
+    {
+      printf ("Structure creation: %s\n", asn1_strerror (asn1_result));
+      asn1_delete_structure (&definitions);
+
+      free (inputFileAsnName);
+      free (inputFileDerName);
+      free (typeName);
+      free (der);
+      exit (1);
+    }
+
+  asn1_result =
+    asn1_der_decoding (&structure, der, der_len, errorDescription);
+  printf ("\nDecoding: %s\n", asn1_strerror (asn1_result));
+  if (asn1_result != ASN1_SUCCESS)
+    printf ("asn1Decoding: %s\n", errorDescription);
+
+  printf ("\nDECODING RESULT:\n");
+  asn1_print_structure (stdout, structure, "", ASN1_PRINT_NAME_TYPE_VALUE);
+
+ /*****************************************/
+  /* ONLY FOR TEST                         */
+ /*****************************************/
+  /*
+     der_len=10000;
+     option_index=0;
+     asn1_result=asn1_read_value(structure,"?2.content",der,&der_len);
+     outputFile=fopen("encryptedData.p12","w");
+     while(der_len>0){
+     fprintf(outputFile,"%c",der[option_index]);
+     der_len--;
+     option_index++;
+     }
+     fclose(outputFile);
+   */
+
+  asn1_delete_structure (&definitions);
+  asn1_delete_structure (&structure);
+
+  free (der);
+
+  free (inputFileAsnName);
+  free (inputFileDerName);
+  free (typeName);
+
+  if (asn1_result != ASN1_SUCCESS)
+    exit (1);
+
+  exit (0);
+}
diff --git a/src/asn1Parser.c b/src/asn1Parser.c
new file mode 100644 (file)
index 0000000..8d50e51
--- /dev/null
@@ -0,0 +1,196 @@
+/* asn1Parser.c -- program to parse a file with ASN1 definitions
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+
+#include <libtasn1.h>
+
+#include <progname.h>
+#include <version-etc.h>
+
+/* This feature is available in gcc versions 2.5 and later.  */
+#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
+# define ATTR_NO_RETRUN
+#else
+# define ATTR_NO_RETRUN __attribute__ ((__noreturn__))
+#endif
+
+ATTR_NO_RETRUN static void
+usage (int status)
+{
+  if (status != EXIT_SUCCESS)
+    fprintf (stderr, "Try `%s --help' for more information.\n", program_name);
+  else
+    {
+      printf ("\
+Usage: %s [OPTION] FILE\n", program_name);
+      printf ("\
+Read FILE with ASN.1 definitions and generate\n\
+a C array that is used with libtasn1 functions.\n\
+\n");
+      printf ("\
+Mandatory arguments to long options are mandatory for short options too.\n\
+  -c, --check           checks the syntax only\n\
+  -o, --output=FILE     output file\n\
+  -n, --name=NAME       array name\n\
+  -h, --help            display this help and exit\n\
+  -v, --version         output version information and exit\n");
+      emit_bug_reporting_address ();
+    }
+  exit (status);
+}
+
+int
+main (int argc, char *argv[])
+{
+  static const struct option long_options[] = {
+    {"help", no_argument, 0, 'h'},
+    {"version", no_argument, 0, 'v'},
+    {"check", no_argument, 0, 'c'},
+    {"output", required_argument, 0, 'o'},
+    {"name", required_argument, 0, 'n'},
+    {0, 0, 0, 0}
+  };
+  int option_index = 0;
+  int option_result;
+  char *outputFileName = NULL;
+  char *inputFileName = NULL;
+  char *vectorName = NULL;
+  int checkSyntaxOnly = 0;
+  ASN1_TYPE pointer = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  int parse_result = ASN1_SUCCESS;
+
+  set_program_name (argv[0]);
+
+  opterr = 0;                  /* disable error messages from getopt */
+
+  while (1)
+    {
+
+      option_result =
+       getopt_long (argc, argv, "hvco:n:", long_options, &option_index);
+
+      if (option_result == -1)
+       break;
+
+      switch (option_result)
+       {
+       case 0:
+         printf ("option %s", long_options[option_index].name);
+         if (optarg)
+           printf (" with arg %s", optarg);
+         printf ("\n");
+         break;
+       case 'h':               /* HELP */
+         free (outputFileName);
+         free (vectorName);
+         usage (EXIT_SUCCESS);
+         break;
+       case 'v':               /* VERSION */
+         version_etc (stdout, program_name, PACKAGE, VERSION,
+                      "Fabio Fiorina", NULL);
+         free (outputFileName);
+         free (vectorName);
+         exit (0);
+         break;
+       case 'c':               /* CHECK SYNTAX */
+         checkSyntaxOnly = 1;
+         break;
+       case 'o':               /* OUTPUT */
+         outputFileName = (char *) malloc (strlen (optarg) + 1);
+         strcpy (outputFileName, optarg);
+         break;
+       case 'n':               /* VECTOR NAME */
+         vectorName = (char *) malloc (strlen (optarg) + 1);
+         strcpy (vectorName, optarg);
+         break;
+       case '?':               /* UNKNOW OPTION */
+         fprintf (stderr,
+                  "asn1Parser: option '%s' not recognized or without argument.\n\n",
+                  argv[optind - 1]);
+         free (outputFileName);
+         free (vectorName);
+         usage (EXIT_FAILURE);
+         break;
+       default:
+         fprintf (stderr,
+                  "asn1Parser: ?? getopt returned character code Ox%x ??\n",
+                  option_result);
+       }
+
+    }
+
+  if (optind == argc)
+    {
+      free (outputFileName);
+      free (vectorName);
+      usage (EXIT_SUCCESS);
+    }
+  else
+    {
+      inputFileName = (char *) malloc (strlen (argv[optind]) + 1);
+      strcpy (inputFileName, argv[optind]);
+    }
+
+  if (checkSyntaxOnly == 1)
+    {
+      parse_result =
+       asn1_parser2tree (inputFileName, &pointer, errorDescription);
+      asn1_delete_structure (&pointer);
+    }
+  else                         /* C VECTOR CREATION */
+    parse_result = asn1_parser2array (inputFileName,
+                                     outputFileName, vectorName,
+                                     errorDescription);
+
+  switch (parse_result)
+    {
+    case ASN1_SUCCESS:
+      printf ("Done.\n");
+      break;
+    case ASN1_FILE_NOT_FOUND:
+      printf ("asn1Parser: FILE %s NOT FOUND\n", inputFileName);
+      break;
+    case ASN1_SYNTAX_ERROR:
+    case ASN1_IDENTIFIER_NOT_FOUND:
+    case ASN1_NAME_TOO_LONG:
+      printf ("asn1Parser: %s\n", errorDescription);
+      break;
+    default:
+      printf ("libtasn1 ERROR: %s\n", asn1_strerror (parse_result));
+    }
+
+
+  free (inputFileName);
+  free (outputFileName);
+  free (vectorName);
+
+  if (parse_result != ASN1_SUCCESS)
+    exit (1);
+  exit (0);
+}
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644 (file)
index 0000000..dec81be
--- /dev/null
@@ -0,0 +1,51 @@
+## Process this file with automake to produce Makefile.in
+# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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/>.
+
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I../gl
+
+AM_LDFLAGS = -no-install
+LDADD = ../lib/libtasn1.la
+
+EXTRA_DIST = Test_parser.asn Test_tree.asn Test_tree_asn1_tab.c        \
+       Test_encoding.asn pkix.asn TestIndef.p12
+
+# For crlf.
+EXTRA_DIST += crlf.cer
+dist_check_SCRIPTS = crlf
+
+dist_check_SCRIPTS += threadsafety
+
+MOSTLYCLEANFILES = Test_parser_ERROR.asn
+
+check_PROGRAMS = Test_parser Test_tree Test_encoding Test_indefinite   \
+       Test_errors
+
+TESTS = Test_parser Test_tree Test_encoding Test_indefinite    \
+       Test_errors crlf threadsafety
+
+TESTS_ENVIRONMENT = \
+       ASN1PARSER=$(srcdir)/Test_parser.asn \
+       ASN1TREE=$(srcdir)/Test_tree.asn \
+       ASN1PKIX=$(srcdir)/pkix.asn \
+       ASN1PKIX=$(srcdir)/pkix.asn \
+       ASN1INDEF=$(srcdir)/TestIndef.p12 \
+       ASN1ENCODING=$(srcdir)/Test_encoding.asn \
+       THREADSAFETY_FILES=`find $(top_srcdir)/lib -name \*.c` \
+       EXEEXT=$(EXEEXT) \
+       $(VALGRIND)
diff --git a/tests/Makefile.in b/tests/Makefile.in
new file mode 100644 (file)
index 0000000..63c4e65
--- /dev/null
@@ -0,0 +1,1008 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009  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, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# 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@
+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@
+check_PROGRAMS = Test_parser$(EXEEXT) Test_tree$(EXEEXT) \
+       Test_encoding$(EXEEXT) Test_indefinite$(EXEEXT) \
+       Test_errors$(EXEEXT)
+TESTS = Test_parser$(EXEEXT) Test_tree$(EXEEXT) Test_encoding$(EXEEXT) \
+       Test_indefinite$(EXEEXT) Test_errors$(EXEEXT) crlf \
+       threadsafety
+subdir = tests
+DIST_COMMON = $(dist_check_SCRIPTS) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+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/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/autobuild.m4 \
+       $(top_srcdir)/gl/m4/extensions.m4 \
+       $(top_srcdir)/gl/m4/getopt.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/longlong.m4 $(top_srcdir)/gl/m4/malloc.m4 \
+       $(top_srcdir)/gl/m4/manywarnings.m4 \
+       $(top_srcdir)/gl/m4/multiarch.m4 \
+       $(top_srcdir)/gl/m4/read-file.m4 \
+       $(top_srcdir)/gl/m4/realloc.m4 $(top_srcdir)/gl/m4/stdarg.m4 \
+       $(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
+       $(top_srcdir)/gl/m4/stdlib_h.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_h.m4 \
+       $(top_srcdir)/gl/m4/wchar_t.m4 $(top_srcdir)/gl/m4/wint_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)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+Test_encoding_SOURCES = Test_encoding.c
+Test_encoding_OBJECTS = Test_encoding.$(OBJEXT)
+Test_encoding_LDADD = $(LDADD)
+Test_encoding_DEPENDENCIES = ../lib/libtasn1.la
+Test_errors_SOURCES = Test_errors.c
+Test_errors_OBJECTS = Test_errors.$(OBJEXT)
+Test_errors_LDADD = $(LDADD)
+Test_errors_DEPENDENCIES = ../lib/libtasn1.la
+Test_indefinite_SOURCES = Test_indefinite.c
+Test_indefinite_OBJECTS = Test_indefinite.$(OBJEXT)
+Test_indefinite_LDADD = $(LDADD)
+Test_indefinite_DEPENDENCIES = ../lib/libtasn1.la
+Test_parser_SOURCES = Test_parser.c
+Test_parser_OBJECTS = Test_parser.$(OBJEXT)
+Test_parser_LDADD = $(LDADD)
+Test_parser_DEPENDENCIES = ../lib/libtasn1.la
+Test_tree_SOURCES = Test_tree.c
+Test_tree_OBJECTS = Test_tree.$(OBJEXT)
+Test_tree_LDADD = $(LDADD)
+Test_tree_DEPENDENCIES = ../lib/libtasn1.la
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+SOURCES = Test_encoding.c Test_errors.c Test_indefinite.c \
+       Test_parser.c Test_tree.c
+DIST_SOURCES = Test_encoding.c Test_errors.c Test_indefinite.c \
+       Test_parser.c Test_tree.c
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors = \
+red=; grn=; lgn=; blu=; std=
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+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@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GETOPT_H = @GETOPT_H@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+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_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+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_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+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_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_GETOPT = @GNULIB_UNISTD_H_GETOPT@
+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_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WRITE = @GNULIB_WRITE@
+GREP = @GREP@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+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_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+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_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@
+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_GRANTPT = @HAVE_GRANTPT@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PWRITE = @HAVE_PWRITE@
+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_REALLOC_POSIX = @HAVE_REALLOC_POSIX@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SETENV = @HAVE_SETENV@
+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_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+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_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TTYNAME_R = @HAVE_TTYNAME_R@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSETENV = @HAVE_UNSETENV@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WINT_T = @HAVE_WINT_T@
+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@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_AGE = @LT_AGE@
+LT_CURRENT = @LT_CURRENT@
+LT_REVISION = @LT_REVISION@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+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_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_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_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_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@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PMCCABE = @PMCCABE@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+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_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+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@
+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@
+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_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@
+lt_ECHO = @lt_ECHO@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+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@
+AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I../gl
+AM_LDFLAGS = -no-install
+LDADD = ../lib/libtasn1.la
+
+# For crlf.
+EXTRA_DIST = Test_parser.asn Test_tree.asn Test_tree_asn1_tab.c \
+       Test_encoding.asn pkix.asn TestIndef.p12 crlf.cer
+dist_check_SCRIPTS = crlf threadsafety
+MOSTLYCLEANFILES = Test_parser_ERROR.asn
+TESTS_ENVIRONMENT = \
+       ASN1PARSER=$(srcdir)/Test_parser.asn \
+       ASN1TREE=$(srcdir)/Test_tree.asn \
+       ASN1PKIX=$(srcdir)/pkix.asn \
+       ASN1PKIX=$(srcdir)/pkix.asn \
+       ASN1INDEF=$(srcdir)/TestIndef.p12 \
+       ASN1ENCODING=$(srcdir)/Test_encoding.asn \
+       THREADSAFETY_FILES=`find $(top_srcdir)/lib -name \*.c` \
+       EXEEXT=$(EXEEXT) \
+       $(VALGRIND)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(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 tests/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu tests/Makefile
+.PRECIOUS: 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):
+
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+Test_encoding$(EXEEXT): $(Test_encoding_OBJECTS) $(Test_encoding_DEPENDENCIES) 
+       @rm -f Test_encoding$(EXEEXT)
+       $(LINK) $(Test_encoding_OBJECTS) $(Test_encoding_LDADD) $(LIBS)
+Test_errors$(EXEEXT): $(Test_errors_OBJECTS) $(Test_errors_DEPENDENCIES) 
+       @rm -f Test_errors$(EXEEXT)
+       $(LINK) $(Test_errors_OBJECTS) $(Test_errors_LDADD) $(LIBS)
+Test_indefinite$(EXEEXT): $(Test_indefinite_OBJECTS) $(Test_indefinite_DEPENDENCIES) 
+       @rm -f Test_indefinite$(EXEEXT)
+       $(LINK) $(Test_indefinite_OBJECTS) $(Test_indefinite_LDADD) $(LIBS)
+Test_parser$(EXEEXT): $(Test_parser_OBJECTS) $(Test_parser_DEPENDENCIES) 
+       @rm -f Test_parser$(EXEEXT)
+       $(LINK) $(Test_parser_OBJECTS) $(Test_parser_LDADD) $(LIBS)
+Test_tree$(EXEEXT): $(Test_tree_OBJECTS) $(Test_tree_DEPENDENCIES) 
+       @rm -f Test_tree$(EXEEXT)
+       $(LINK) $(Test_tree_OBJECTS) $(Test_tree_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_encoding.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_errors.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_indefinite.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Test_tree.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       set x; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+             END { if (nonempty) { for (i in files) print i; }; }'`; \
+       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"
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+check-TESTS: $(TESTS)
+       @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+       srcdir=$(srcdir); export srcdir; \
+       list=' $(TESTS) '; \
+       $(am__tty_colors); \
+       if test -n "$$list"; then \
+         for tst in $$list; do \
+           if test -f ./$$tst; then dir=./; \
+           elif test -f $$tst; then dir=; \
+           else dir="$(srcdir)/"; fi; \
+           if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xpass=`expr $$xpass + 1`; \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=XPASS; \
+             ;; \
+             *) \
+               col=$$grn; res=PASS; \
+             ;; \
+             esac; \
+           elif test $$? -ne 77; then \
+             all=`expr $$all + 1`; \
+             case " $(XFAIL_TESTS) " in \
+             *[\ \     ]$$tst[\ \      ]*) \
+               xfail=`expr $$xfail + 1`; \
+               col=$$lgn; res=XFAIL; \
+             ;; \
+             *) \
+               failed=`expr $$failed + 1`; \
+               col=$$red; res=FAIL; \
+             ;; \
+             esac; \
+           else \
+             skip=`expr $$skip + 1`; \
+             col=$$blu; res=SKIP; \
+           fi; \
+           echo "$${col}$$res$${std}: $$tst"; \
+         done; \
+         if test "$$all" -eq 1; then \
+           tests="test"; \
+           All=""; \
+         else \
+           tests="tests"; \
+           All="All "; \
+         fi; \
+         if test "$$failed" -eq 0; then \
+           if test "$$xfail" -eq 0; then \
+             banner="$$All$$all $$tests passed"; \
+           else \
+             if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
+             banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
+           fi; \
+         else \
+           if test "$$xpass" -eq 0; then \
+             banner="$$failed of $$all $$tests failed"; \
+           else \
+             if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
+             banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
+           fi; \
+         fi; \
+         dashes="$$banner"; \
+         skipped=""; \
+         if test "$$skip" -ne 0; then \
+           if test "$$skip" -eq 1; then \
+             skipped="($$skip test was not run)"; \
+           else \
+             skipped="($$skip tests were not run)"; \
+           fi; \
+           test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$skipped"; \
+         fi; \
+         report=""; \
+         if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+           report="Please report to $(PACKAGE_BUGREPORT)"; \
+           test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+             dashes="$$report"; \
+         fi; \
+         dashes=`echo "$$dashes" | sed s/./=/g`; \
+         if test "$$failed" -eq 0; then \
+           echo "$$grn$$dashes"; \
+         else \
+           echo "$$red$$dashes"; \
+         fi; \
+         echo "$$banner"; \
+         test -z "$$skipped" || echo "$$skipped"; \
+         test -z "$$report" || echo "$$report"; \
+         echo "$$dashes$$std"; \
+         test "$$failed" -eq 0; \
+       else :; fi
+
+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
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \
+         $(dist_check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+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:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+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-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+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 -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool ctags \
+       distclean distclean-compile 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-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags uninstall uninstall-am
+
+
+# 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/tests/TestIndef.p12 b/tests/TestIndef.p12
new file mode 100644 (file)
index 0000000..285d8dd
Binary files /dev/null and b/tests/TestIndef.p12 differ
diff --git a/tests/Test_encoding.asn b/tests/Test_encoding.asn
new file mode 100644 (file)
index 0000000..a50c340
--- /dev/null
@@ -0,0 +1,35 @@
+--
+--  File used in the test sequence Test_encoding.
+--
+
+TEST_TREE { }
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+Koko ::= SEQUENCE {
+   seqint SEQUENCE OF INTEGER,
+   int INTEGER,
+   str OCTET STRING
+}
+
+END
+
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-- 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/>.
diff --git a/tests/Test_encoding.c b/tests/Test_encoding.c
new file mode 100644 (file)
index 0000000..12f89c6
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+/******************************************************/
+/* File: Test_encoding.c                              */
+/* Description: Test writing values and DER encoding. */
+/******************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "libtasn1.h"
+
+
+unsigned char data[256];
+int data_size = sizeof (data);
+
+
+int
+main (int argc, char *argv[])
+{
+  asn1_retCode result;
+  ASN1_TYPE definitions = ASN1_TYPE_EMPTY;
+  ASN1_TYPE asn1_element = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  const char *treefile = getenv ("ASN1ENCODING");
+
+  if (!treefile)
+    treefile = "Test_encoding.asn";
+
+  printf ("\n\n/****************************************/\n");
+  printf ("/*     Test sequence : coding-decoding  */\n");
+  printf ("/****************************************/\n\n");
+
+  /* Check version */
+  if (asn1_check_version ("0.3.3") == NULL)
+    printf ("\nLibrary version check ERROR:\n actual version: %s\n\n",
+           asn1_check_version (NULL));
+
+  result = asn1_parser2tree (treefile, &definitions, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("ErrorDescription = %s\n\n", errorDescription);
+      exit (1);
+    }
+
+  result = asn1_create_element (definitions, "TEST_TREE.Koko", &asn1_element);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "asn1_create_element(): ");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  result = asn1_write_value (asn1_element, "seqint", "NEW", 1);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "asn1_write_value(): seqint ");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  result = asn1_write_value (asn1_element, "seqint.?LAST", "1234", 0);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "asn1_write_value(): seqint.?LAST ");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  result = asn1_write_value (asn1_element, "int", "\x0f\xff\x01", 3);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "asn1_write_value(): int ");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  result = asn1_write_value (asn1_element, "str", "string", 6);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "asn1_write_value(): str ");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  /* Clear the definition structures */
+  asn1_delete_structure (&definitions);
+
+  result = asn1_der_coding (asn1_element, "", data, &data_size, NULL);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "Encoding error.\n");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  result = asn1_der_decoding (&asn1_element, data, data_size, NULL);
+  if (result != ASN1_SUCCESS)
+    {
+      fprintf (stderr, "Decoding error.\n");
+      asn1_perror (result);
+      exit (1);
+    }
+
+  asn1_delete_structure (&asn1_element);
+
+  printf ("Success\n");
+  exit (0);
+}
diff --git a/tests/Test_errors.c b/tests/Test_errors.c
new file mode 100644 (file)
index 0000000..1f65d7b
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2010 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/>.
+ *
+ */
+
+#include "libtasn1.h"
+
+int
+main (int argc, char *argv[])
+{
+  asn1_retCode ec = 0;
+  const char *errstr;
+
+  do
+    {
+      errstr = asn1_strerror (ec);
+      asn1_perror (ec);
+#ifndef ASN1_DISABLE_DEPRECATED
+      errstr = libtasn1_strerror (ec);
+      libtasn1_perror (ec);
+#endif
+      ec++;
+    }
+  while (errstr);
+
+  return 0;
+}
diff --git a/tests/Test_indefinite.c b/tests/Test_indefinite.c
new file mode 100644 (file)
index 0000000..d51585e
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+
+/*****************************************************/
+/* File: Test_tree.c                                 */
+/* Description: Test sequences for these functions:  */
+/*     asn1_visit_tree,                              */
+/*     asn1_create_element,                          */
+/*     asn1_delete_structure,                        */
+/*     asn1_write_value,                             */
+/*     asn1_read_value,                              */
+/*****************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "libtasn1.h"
+
+
+
+int
+main (int argc, char *argv[])
+{
+  asn1_retCode result;
+  char buffer[10 * 1024];
+  ASN1_TYPE definitions = ASN1_TYPE_EMPTY;
+  ASN1_TYPE asn1_element = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  FILE *out, *fd;
+  ssize_t size;
+  const char *treefile = getenv ("ASN1PKIX");
+  const char *indeffile = getenv ("ASN1INDEF");
+
+  if (!treefile)
+    treefile = "pkix.asn";
+
+  if (!indeffile)
+    indeffile = "TestIndef.p12";
+
+  printf ("\n\n/****************************************/\n");
+  printf ("/*     Test sequence : Test_indefinite  */\n");
+  printf ("/****************************************/\n\n");
+  printf ("ASN1TREE: %s\n", treefile);
+
+  /* Check version */
+  if (asn1_check_version ("0.2.11") == NULL)
+    printf ("\nLibrary version check ERROR:\n actual version: %s\n\n",
+           asn1_check_version (NULL));
+
+  result = asn1_parser2tree (treefile, &definitions, errorDescription);
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("ErrorDescription = %s\n\n", errorDescription);
+      exit (1);
+    }
+
+  out = stdout;
+
+  fd = fopen (indeffile, "rb");
+  if (fd == NULL)
+    {
+      printf ("Cannot read file %s\n", indeffile);
+      exit (1);
+    }
+  size = fread (buffer, 1, sizeof (buffer), fd);
+  if (size <= 0)
+    {
+      printf ("Cannot read from file %s\n", indeffile);
+      exit (1);
+    }
+
+  fclose (fd);
+
+  result =
+    asn1_create_element (definitions, "PKIX1.pkcs-12-PFX", &asn1_element);
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("Cannot create PKCS12 element\n");
+      exit (1);
+    }
+
+  result = asn1_der_decoding (&asn1_element, buffer, size, errorDescription);
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("Cannot decode BER data (size %d)\n", size);
+      exit (1);
+    }
+
+  /* Clear the definition structures */
+  asn1_delete_structure (&definitions);
+  asn1_delete_structure (&asn1_element);
+
+  if (out != stdout)
+    fclose (out);
+
+  exit (0);
+}
diff --git a/tests/Test_parser.asn b/tests/Test_parser.asn
new file mode 100644 (file)
index 0000000..6ea455c
--- /dev/null
@@ -0,0 +1,45 @@
+--
+--  File used in the test sequence Test_parser.
+--
+
+
+TEST_PARSER {iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)}
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+
+Sequence1 ::= SEQUENCE{
+    int1  -- Test --   INTEGER (5),
+    int2     INTEGER (10 | 12),
+    generic  GeneralString
+}
+
+OidTest ::= SEQUENCE{
+   oid1    OBJECT IDENTIFIER DEFAULT Oid-type1
+}
+
+Oid-type1 OBJECT IDENTIFIER ::= {1 2 3 4}
+
+Bitstringsizetest ::= BIT STRING (SIZE(42))
+
+END
+
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-- 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/>.
diff --git a/tests/Test_parser.c b/tests/Test_parser.c
new file mode 100644 (file)
index 0000000..3cbcf19
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2002, 2006, 2007, 2009, 2010 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/>.
+ *
+ */
+
+
+/*****************************************************/
+/* File: Test_parser.c                               */
+/* Description: Test sequences for these functions:  */
+/*     asn1_parser_asn1,                             */
+/*****************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "libtasn1.h"
+
+typedef struct
+{
+  int lineNumber;
+  char *line;
+  int errorNumber;
+  char *errorDescription;
+} test_type;
+
+char *fileCorrectName;
+char fileErroredName[] = "Test_parser_ERROR.asn";
+
+#define _FILE_ "Test_parser_ERROR.asn"
+
+test_type test_array[] = {
+  /* Test DEFINITIONS syntax */
+  {5,
+   "TEST_PARSER2 { } DEFINITIONS IMPLICIT TAGS ::= BEGIN int1 ::= INTEGER END",
+   ASN1_SYNTAX_ERROR, _FILE_ ":6: parse error near 'TEST_PARSER'"},
+  {6, "TEST_PARSER { }", ASN1_SUCCESS, ""},
+
+  /* Test ASN1_MAX_NAME_SIZE (128) */
+  {12,
+   "a1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 ::= INTEGER",
+   ASN1_SUCCESS, ""},
+  {12,
+   "a12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 ::= INTEGER",
+   ASN1_NAME_TOO_LONG,
+   _FILE_ ":12: name too long (more than 128 characters)"},
+
+  /* Test 'check identifier' function */
+  {12, "ident1 ::= ident2   ident2 ::= INTEGER",
+   ASN1_SUCCESS, ""},
+  {12, "ident1 ::= ident2",
+   ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'ident2' not found"},
+  {12, "obj1 OBJECT IDENTIFIER ::= {pkix 0 5 4}    "
+   "pkix OBJECT IDENTIFIER ::= {1 2}",
+   ASN1_SUCCESS, ""},
+  {12, "obj1 OBJECT IDENTIFIER ::= {pkix 0 5 4}",
+   ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'pkix' not found"},
+
+  /* Test INTEGER */
+  {14, "int1 INTEGER OPTIONAL,", ASN1_SUCCESS, ""},
+  {14, "int1 INTEGER DEFAULT 1,", ASN1_SUCCESS, ""},
+  {14, "int1 INTEGER DEFAULT -1,", ASN1_SUCCESS, ""},
+  {14, "int1 INTEGER DEFAULT v1,", ASN1_SUCCESS, ""},
+  {14, "int1 [1] INTEGER,", ASN1_SUCCESS, ""},
+  {14, "int1 [1] EXPLICIT INTEGER,", ASN1_SUCCESS, ""},
+  {14, "int1 [1] IMPLICIT INTEGER,", ASN1_SUCCESS, ""},
+  {12, "Integer ::= [1] EXPLICIT INTEGER {v1(-1), v2(1)}", ASN1_SUCCESS, ""},
+  {12, "Integer ::= INTEGER {v1(0), v2}",
+   ASN1_SYNTAX_ERROR, _FILE_ ":12: parse error near '}'"},
+  {12, "Integer ::= INTEGER {v1(0), 1}",
+   ASN1_SYNTAX_ERROR, _FILE_ ":12: parse error near '1'"},
+  {12, "const1 INTEGER ::= -1", ASN1_SUCCESS, ""},
+  {12, "const1 INTEGER ::= 1", ASN1_SUCCESS, ""},
+  {12, "const1 INTEGER ::= v1",
+   ASN1_SYNTAX_ERROR, _FILE_ ":12: parse error near 'v1'"},
+  {16, " generic generalstring",
+   ASN1_IDENTIFIER_NOT_FOUND,
+   _FILE_ ":: identifier 'generalstring' not found"},
+
+  /* Test: OID */
+  {20, "   oid1    OBJECT IDENTIFIER DEFAULT Oid-type",
+   ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier 'Oid-type' not found"},
+  {20, "   oid1    OBJECT IDENTIFIER DEFAULT 1",
+   ASN1_IDENTIFIER_NOT_FOUND, _FILE_ ":: identifier '1' not found"},
+  {20, "   oid1    OBJECT IDENTIFIER DEFAULT",
+   ASN1_SYNTAX_ERROR, _FILE_ ":21: parse error near '}'"},
+  {20, "   oid1    OBJECT IDENTIFIER DEFAULT Oid-type1",
+   ASN1_SUCCESS, ""},
+
+
+  /* end */
+  {0}
+};
+
+int
+readLine (FILE * file, char *line)
+{
+  int c;
+
+  while (((c = fgetc (file)) != EOF) && (c != '\n'))
+    {
+      *line = c;
+      line++;
+    }
+
+  *line = 0;
+
+  return c;
+}
+
+
+void
+createFile (int lineNumber, char *line)
+{
+  FILE *fileIn, *fileOut;
+  char lineRead[1024];
+  int fileInLineNumber = 0;
+
+  fileIn = fopen (fileCorrectName, "r");
+  fileOut = fopen (fileErroredName, "w");
+
+  while (readLine (fileIn, lineRead) != EOF)
+    {
+      fileInLineNumber++;
+      if (fileInLineNumber == lineNumber)
+       fprintf (fileOut, "%s\n", line);
+      else
+       fprintf (fileOut, "%s\n", lineRead);
+    }
+
+  fclose (fileOut);
+  fclose (fileIn);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  asn1_retCode result;
+  ASN1_TYPE definitions = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  test_type *test;
+  int errorCounter = 0, testCounter = 0;
+
+  fileCorrectName = getenv ("ASN1PARSER");
+  if (!fileCorrectName)
+    fileCorrectName = "Test_parser.asn";
+
+  printf ("\n\n/****************************************/\n");
+  printf ("/*     Test sequence : Test_parser      */\n");
+  printf ("/****************************************/\n\n");
+  printf ("ASN1PARSER: %s\n", fileCorrectName);
+
+  result = asn1_parser2tree (fileCorrectName, &definitions, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      printf ("File '%s' not correct\n", fileCorrectName);
+      asn1_perror (result);
+      printf ("ErrorDescription = %s\n\n", errorDescription);
+      exit (1);
+    }
+
+  /* Only for Test */
+  /* asn1_visit_tree(stdout,definitions,"TEST_PARSER",ASN1_PRINT_ALL); */
+
+  /* Clear the definitions structures */
+  asn1_delete_structure (&definitions);
+
+
+  test = test_array;
+
+  while (test->lineNumber != 0)
+    {
+      testCounter++;
+
+      createFile (test->lineNumber, test->line);
+
+      result =
+       asn1_parser2tree (fileErroredName, &definitions, errorDescription);
+      asn1_delete_structure (&definitions);
+
+      if ((result != test->errorNumber) ||
+         (strcmp (errorDescription, test->errorDescription)))
+       {
+         errorCounter++;
+         printf ("ERROR N. %d:\n", errorCounter);
+         printf ("  Line %d - %s\n", test->lineNumber, test->line);
+         printf ("  Error expected: %s - %s\n",
+                 asn1_strerror (test->errorNumber), test->errorDescription);
+         printf ("  Error detected: %s - %s\n\n", asn1_strerror (result),
+                 errorDescription);
+       }
+
+      test++;
+    }
+
+
+  printf ("Total tests : %d\n", testCounter);
+  printf ("Total errors: %d\n", errorCounter);
+
+  if (errorCounter > 0)
+    return 1;
+
+  exit (0);
+}
diff --git a/tests/Test_tree.asn b/tests/Test_tree.asn
new file mode 100644 (file)
index 0000000..c8187f4
--- /dev/null
@@ -0,0 +1,178 @@
+--
+--  File used in the test sequence Test_tree.
+--
+
+TEST_TREE {iso(1) identified-organization(3) dod(6) internet(1)
+  security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)}
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+KrbError ::= [APPLICATION 30] SEQUENCE {
+    pvno[0]   INTEGER
+}
+
+Checksum        ::= SEQUENCE {
+        checksum        [1] OCTET STRING
+}
+
+CertTemplate ::= SEQUENCE {
+    version      [0] INTEGER               OPTIONAL,
+    issuer       [3] Name                  OPTIONAL,
+    validity     [4] INTEGER               OPTIONAL
+}
+
+Name            ::=   CHOICE {
+    rdnSequence  RDNSequence }
+
+RDNSequence     ::=   RelativeDistinguishedName
+
+RelativeDistinguishedName  ::=
+
+                    SET SIZE (1 .. MAX) OF AttributeTypeAndValue
+
+AttributeTypeAndValue           ::=     SEQUENCE {
+        type    AttributeType,
+        value   AttributeValue }
+
+AttributeType           ::=   OBJECT IDENTIFIER
+AttributeValue          ::=   ANY
+
+
+sequenceEmpty ::= SEQUENCE{
+  int1   INTEGER,
+  seq1   [1] IMPLICIT Sequence_octetTest1,
+  set1   [2] EXPLICIT SET OF INTEGER
+}
+
+
+IndefiniteLengthTest ::= SEQUENCE{
+  seq1   [1] IMPLICIT Sequence_octetTest1,
+  set1   SET OF OBJECT IDENTIFIER,
+  int1   INTEGER
+}
+
+
+OidTest ::= SEQUENCE{
+   oid3 [3]   OBJECT IDENTIFIER DEFAULT id-Test,
+   oid  [1]   OBJECT IDENTIFIER DEFAULT id-anyTest2,
+   oid2        [2]   OBJECT IDENTIFIER DEFAULT id-anyTest
+}
+
+OidAndTimeTest ::= SEQUENCE{
+   set     SET OF INTEGER,
+   oid     OBJECT IDENTIFIER,
+   time2   GeneralizedTime,
+   bol     BOOLEAN,
+   oct     OCTET STRING,
+   bit     BIT STRING OPTIONAL,
+   bol2    BOOLEAN DEFAULT TRUE,
+   enum    ENUMERATED {v1(1),v2(2)} DEFAULT v1,
+   any     [1] ANY OPTIONAL,
+   gen     GeneralString OPTIONAL,
+   time1   UTCTime
+}
+
+SequenceTestTag ::= SEQUENCE{
+   int1   [2] EXPLICIT INTEGER,
+   int2   [3] IMPLICIT INTEGER,
+   str1   [1] IMPLICIT PrintableString,
+   str2                UniversalString,
+   str3   [2] EXPLICIT UniversalString
+}
+
+
+Sequence1 ::= SEQUENCE{
+    int1 [0] INTEGER {v1(0),v2(1),v3(2)} DEFAULT v2,
+    int2     INTEGER,
+    seq      SET OF INTEGER,
+    id       OBJECT IDENTIFIER,
+    oct      OCTET STRING,
+    any1     ANY DEFINED BY id OPTIONAL
+}
+
+DHParameter ::= SEQUENCE {
+    prime INTEGER,
+    base  INTEGER,
+    privateValueLength INTEGER OPTIONAL
+}
+
+id-octetTest1 OBJECT IDENTIFIER  ::=  {1 2 3 4}
+
+Sequence_octetTest1 ::= SEQUENCE{
+    int     INTEGER OPTIONAL
+}
+
+
+AnyTest2 ::= CHOICE{
+     str    OCTET STRING,
+     int    INTEGER
+}
+
+id-ic OBJECT IDENTIFIER  ::=  {2 5}
+id-anyTest OBJECT IDENTIFIER  ::=  {id-ic 29 1}
+id-anyTest2 OBJECT IDENTIFIER  ::=  {id-ic 29 2}
+
+
+anyTest2  ::= INTEGER
+
+
+VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING
+
+NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING
+
+IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING
+
+TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING
+
+PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING
+
+UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
+        -- UniversalString is defined in ASN.1:1993
+
+BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
+      -- BMPString is the subtype of UniversalString and models
+       -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1
+
+UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
+        -- The content of this type conforms to RFC 2279.
+
+
+Test3 ::= SEQUENCE{
+     a      INTEGER,
+     b      [1] EXPLICIT GeneralString2
+}
+
+
+GeneralString2 ::= [2] EXPLICIT GeneralString
+
+X520LocalityName ::= CHOICE {
+      teletexString       TeletexString,
+      printableString     PrintableString,
+      universalString     UniversalString,
+      utf8String          UTF8String,
+      bmpString           BMPString    }
+
+
+id-Test OBJECT IDENTIFIER  ::=  {1 2 29 2}
+
+END
+
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-- 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/>.
diff --git a/tests/Test_tree.c b/tests/Test_tree.c
new file mode 100644 (file)
index 0000000..3fc2a78
--- /dev/null
@@ -0,0 +1,776 @@
+/*
+ * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 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/>.
+ *
+ */
+
+
+/*****************************************************/
+/* File: Test_tree.c                                 */
+/* Description: Test sequences for these functions:  */
+/*     asn1_visit_tree,                              */
+/*     asn1_create_element,                          */
+/*     asn1_delete_structure,                        */
+/*     asn1_write_value,                             */
+/*     asn1_read_value,                              */
+/*****************************************************/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "libtasn1.h"
+
+#include "Test_tree_asn1_tab.c"
+
+#define ACT_NULL       0
+#define ACT_CREATE     1
+#define ACT_DELETE     2
+#define ACT_WRITE      3
+#define ACT_READ       4
+#define ACT_VISIT      5
+#define ACT_ENCODING   6
+#define ACT_DECODING   7
+#define ACT_PRINT_DER  8
+#define ACT_EXPAND_ANY 9
+#define ACT_DECODING_ELEMENT   10
+#define ACT_EXPAND_OCTET       11
+#define ACT_NUMBER_OF_ELEMENTS 12
+#define ACT_DECODING_START_END 13
+#define ACT_READ_DEFINITIONS   14
+#define ACT_READ_TAG_CLASS     15
+#define ACT_OID_2_STRUCTURE    16
+#define ACT_READ_LENGTH        17
+#define ACT_ENCODING_LENGTH    18
+#define ACT_READ_BIT           19
+#define ACT_SET_DER            20
+#define ACT_DELETE_ELEMENT     21
+
+
+typedef struct
+{
+  int action;
+  char *par1;
+  unsigned char *par2;
+  int par3;
+  int errorNumber;
+} test_type;
+
+
+test_type test_array[] = {
+
+  {ACT_DELETE, "", "", 0, ASN1_ELEMENT_NOT_FOUND},
+
+  /* Test: APPLICATION 30 */
+  {ACT_CREATE, "TEST_TREE.KrbError", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "pvno", "5", 0, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 5, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 4, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 5, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.KrbError", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE_ELEMENT, "pvno", "", 0, ASN1_SUCCESS},
+  {ACT_DELETE_ELEMENT, "pvno", "", 0, ASN1_ELEMENT_NOT_FOUND},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: CHOICE */
+  {ACT_CREATE, "TEST_TREE.CertTemplate", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "version", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "validity", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer", "rdnSequence", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.3", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
+   "\x0c\x18\x71\x75\x61\x73\x61\x72\x2e\x6c\x61\x73\x2e\x69\x63\x2e\x75\x6e\x69\x63\x61\x6d\x70\x2e\x62\x72",
+   26, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.7", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
+   "\x0c\x08\x43\x61\x6d\x70\x69\x6e\x61\x73", 10, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.6", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
+   "\x13\x06\x42\x72\x61\x73\x69\x6c", 8, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.10", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x02\x49\x43", 4,
+   ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.11", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value", "\x0c\x03\x4c\x41\x53", 5,
+   ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "2.5.4.8", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
+   "\x0c\x09\x53\x61\x6f\x20\x50\x61\x75\x6c\x6f", 11, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.type", "1.2.840.113549.1.9.1", 0,
+   ASN1_SUCCESS},
+  {ACT_WRITE, "issuer.rdnSequence.?LAST.value",
+   "\x16\x19\x65\x64\x75\x61\x72\x64\x6f\x40\x6c\x61\x73\x2e\x69\x63\x2e\x75\x6e\x69\x63\x61\x6d\x70\x2e\x62\x72",
+   27, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 152, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 151, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 152, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.CertTemplate", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?1", "", 0, ASN1_SUCCESS},
+  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?1", "", 0,
+   ASN1_ELEMENT_NOT_FOUND},
+  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?3", "", 0, ASN1_SUCCESS},
+  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?5", "", 0, ASN1_SUCCESS},
+  {ACT_DELETE_ELEMENT, "issuer.rdnSequence.?7", "", 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: Empty sequnces */
+  {ACT_CREATE, "TEST_TREE.sequenceEmpty", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "int1", "1", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "seq1.int", NULL, 0, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 11, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 10, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 11, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.sequenceEmpty", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "seq1", "START", 5, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "seq1", "END", 6, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "set1", "START", 7, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "set1", "END", 10, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: Indefinite Length */
+  {ACT_CREATE, "TEST_TREE.IndefiniteLengthTest", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "int1", "1", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "seq1.int", "2", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set1", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set1.?LAST", "1.2.3.4", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set1", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set1.?LAST", "1.2.5.6", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 255, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_SET_DER,
+   "\x30\x18\xa1\x80\x02\x01\x02\x00\x00\x31\x80\x06\x03\x2a\x03\x04\x06\x03\x2a\x05\x06\x00\x00\x02\x01\x01",
+   0, 26, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.IndefiniteLengthTest", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "seq1", "START", 2, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "seq1", "END", 8, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "set1", "START", 9, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "set1", "END", 22, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: OID */
+  {ACT_CREATE, "TEST_TREE.OidTest", 0, 0, ASN1_SUCCESS},
+  {ACT_READ_LENGTH, "oid", NULL, 9, ASN1_MEM_ERROR},
+  {ACT_READ, "oid", "2.5.29.2", 9, ASN1_SUCCESS},
+  {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "oid2", "2.5.29.1", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "oid3", "1.2.29.2", 0, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 7, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 6, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 7, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.OidTest", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "oid", "START", 2, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "oid", "END", 6, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "", "START", 0, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "", "END", 6, ASN1_SUCCESS},
+  {ACT_READ, "oid2", "2.5.29.1", 9, ASN1_SUCCESS},
+  {ACT_READ, "oid3", "1.2.29.2", 9, ASN1_SUCCESS},
+  {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: ENCODING_LENGTH and READ_LEN */
+  {ACT_CREATE, "TEST_TREE.OidAndTimeTest", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "oid", "1.2.3.4", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "time1", "9801011200Z", 1, ASN1_SUCCESS},
+  {ACT_WRITE, "time2", "2001010112001.12-0700", 1, ASN1_SUCCESS},
+  {ACT_WRITE, "oct", "ABCD", 4, ASN1_SUCCESS},
+  {ACT_WRITE, "bol", "TRUE", 1, ASN1_SUCCESS},
+  {ACT_WRITE, "enum", "2", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "bit", "1\xC0", 10, ASN1_SUCCESS},
+  {ACT_WRITE, "any", "\x30\x01\x01", 3, ASN1_SUCCESS},
+  {ACT_WRITE, "set", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set.?LAST", "10", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set", "NEW", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "set.?LAST", "1", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "gen", "Prova", 5, ASN1_SUCCESS},
+  {ACT_READ_LENGTH, "oid", NULL, 8, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "time1", NULL, 12, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "time2", NULL, 22, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "oct", NULL, 4, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "bol", NULL, 5, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "enum", NULL, 1, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "any", NULL, 3, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "gen", NULL, 5, ASN1_MEM_ERROR},
+  {ACT_READ_LENGTH, "bit", NULL, 10, ASN1_MEM_ERROR},
+  {ACT_READ_BIT, "bit", "1\xC0", 10, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 79, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 78, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 79, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.OidAndTimeTest", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: OID to STRUCTURE */
+  {ACT_OID_2_STRUCTURE, "2.5.29.3", "", 0, ASN1_ELEMENT_NOT_FOUND},
+  {ACT_OID_2_STRUCTURE, "1.2.29.2", "", 0, ASN1_ELEMENT_NOT_FOUND},
+  {ACT_OID_2_STRUCTURE, "2.5.29.2", "anyTest2", 0, ASN1_SUCCESS},
+
+  /* Test: READ TAG and CLASS */
+  {ACT_CREATE, "TEST_TREE.SequenceTestTag", 0, 0, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "int", "", 0, ASN1_ELEMENT_NOT_FOUND},
+  {ACT_READ_TAG_CLASS, "int1", "TAG", ASN1_TAG_INTEGER, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "int1", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "int2", "TAG", 3, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "int2", "CLASS", ASN1_CLASS_CONTEXT_SPECIFIC,
+   ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "str1", "TAG", 1, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "str1", "CLASS", ASN1_CLASS_CONTEXT_SPECIFIC,
+   ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "str2", "TAG", 28, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "str2", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "str3", "TAG", 28, ASN1_SUCCESS},
+  {ACT_READ_TAG_CLASS, "str3", "CLASS", ASN1_CLASS_UNIVERSAL, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: OBJECT IDENTIFIER  elements */
+  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "int1", "v2", 0, ASN1_SUCCESS},
+  {ACT_READ, "int1", "\x01", 1, ASN1_SUCCESS},
+  {ACT_WRITE, "int2", "0", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "oct", "\x02\x01\x0a", 3, ASN1_SUCCESS},
+  {ACT_WRITE, "id", "1 2 3 4 5", 0, ASN1_VALUE_NOT_VALID},
+  {ACT_WRITE, "id", "2.5.29.2", 0, ASN1_SUCCESS},
+  {ACT_READ, "id", "2.5.29.2", 9, ASN1_SUCCESS},
+  {ACT_READ_LENGTH, "id", NULL, 9, ASN1_MEM_ERROR},
+  {ACT_WRITE, "any1", "\x02\x01\x05", 3, ASN1_SUCCESS},
+  {ACT_READ_DEFINITIONS, "TEST_TREE.id-anyTest", "2.5.29.1", 9, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 20, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 19, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 200, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "id", "START", 7, ASN1_SUCCESS},
+  {ACT_READ, "id", "2.5.29.2", 9, ASN1_SUCCESS},
+  {ACT_EXPAND_ANY, "", NULL, 0, ASN1_SUCCESS},
+  {ACT_EXPAND_OCTET, "oct", "id", 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: CHOICE elements */
+  {ACT_CREATE, "TEST_TREE.X520LocalityName", 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "", "teletexString", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "teletexString", "PROVA", 5, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 7, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 6, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 7, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.X520LocalityName", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: OPTIONAL elements */
+  {ACT_CREATE, "TEST_TREE.DHParameter", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "prime", "1", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "base", "2", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "privateValueLength", NULL, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 8, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 7, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 8, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.DHParameter", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: Integer */
+  {ACT_CREATE, "TEST_TREE.AnyTest2", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "", "int", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "0", 0, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 3, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 2, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 3, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "-1", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "1", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "2000000000", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "-2000000000", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "-20000000000", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_WRITE, "int", "20000000000", 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test: elements without names */
+  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "int2", "10", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "seq", "NEW", 1, ASN1_SUCCESS},
+  {ACT_WRITE, "seq.?LAST", "1", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "seq", "NEW", 1, ASN1_SUCCESS},
+  {ACT_WRITE, "seq.?LAST", "2", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "any1", NULL, 0, ASN1_SUCCESS},
+  {ACT_NUMBER_OF_ELEMENTS, "seq", "", 2, ASN1_SUCCESS},
+  {ACT_WRITE, "id", "1.2.3.4", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "oct", "\x30\x03\x02\x01\x15", 5, ASN1_SUCCESS},
+  {ACT_ENCODING, "int2", 0, 1024, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_ENCODING, "seq.?2", 0, 2, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "seq.?2", 0, 3, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 25, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 24, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 25, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_ELEMENT, "int2", 0, 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_READ, "int2", "\x0a", 1, ASN1_SUCCESS},
+  {ACT_READ_LENGTH, "int2", NULL, 1, ASN1_MEM_ERROR},
+  {ACT_CREATE, "TEST_TREE.Sequence1", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_START_END, "seq.?2", "START", 10, ASN1_SUCCESS},
+  {ACT_EXPAND_OCTET, "oct", "id", 0, ASN1_SUCCESS},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Test GeneralString */
+  {ACT_CREATE, "TEST_TREE.Test3", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "a", "1234", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "b", "prova", 5, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 17, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 16, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 17, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.Test3", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_ELEMENT, "b", 0, 0, ASN1_SUCCESS},
+  {ACT_READ, "b", "prova", 5, ASN1_SUCCESS},
+  {ACT_READ_LENGTH, "b", NULL, 5, ASN1_MEM_ERROR},
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* Bug regression test: Empty write on 64-bit platforms */
+  {ACT_CREATE, "TEST_TREE.Checksum", 0, 0, ASN1_SUCCESS},
+  {ACT_WRITE, "checksum", "foo", 0, ASN1_SUCCESS},
+  {ACT_WRITE, "checksum", "", 0, ASN1_SUCCESS},
+  {ACT_ENCODING_LENGTH, "", 0, 4, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 3, ASN1_MEM_ERROR},
+  {ACT_ENCODING, "", 0, 4, ASN1_SUCCESS},
+  {ACT_PRINT_DER, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+  {ACT_CREATE, "TEST_TREE.Checksum", 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING, 0, 0, 0, ASN1_SUCCESS},
+  {ACT_DECODING_ELEMENT, "checksum", 0, 0, ASN1_SUCCESS},
+  {ACT_READ, "checksum", "", 0, ASN1_SUCCESS},
+  {ACT_READ_LENGTH, "checksum", NULL, 0, ASN1_SUCCESS},        /* MEM_FAILURE? */
+  {ACT_VISIT, "", "", ASN1_PRINT_ALL, ASN1_SUCCESS},
+  {ACT_DELETE, "", "", 0, ASN1_SUCCESS},
+
+  /* end */
+  {ACT_NULL}
+
+};
+
+
+int
+main (int argc, char *argv[])
+{
+  asn1_retCode result;
+  ASN1_TYPE definitions = ASN1_TYPE_EMPTY;
+  ASN1_TYPE asn1_element = ASN1_TYPE_EMPTY;
+  char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE];
+  FILE *out;
+  test_type *test;
+  int errorCounter = 0, testCounter = 0, der_len;
+  unsigned char value[1024], der[1024];
+  int valueLen, tag = 0, class = 0;
+  int k;
+  int start, end;
+  const char *str_p = NULL;
+  const char *treefile = getenv ("ASN1TREE");
+
+  if (!treefile)
+    treefile = "Test_tree.asn";
+
+  printf ("\n\n/****************************************/\n");
+  printf ("/*     Test sequence : Test_tree        */\n");
+  printf ("/****************************************/\n\n");
+  printf ("ASN1TREE: %s\n", treefile);
+
+  /* Check version */
+  if (asn1_check_version ("0.2.11") == NULL)
+    printf ("\nLibrary version check ERROR:\n actual version: %s\n\n",
+           asn1_check_version (NULL));
+
+  if (1)
+    result = asn1_parser2tree (treefile, &definitions, errorDescription);
+  else
+    result =
+      asn1_array2tree (Test_tree_asn1_tab, &definitions, errorDescription);
+
+  if (result != ASN1_SUCCESS)
+    {
+      asn1_perror (result);
+      printf ("ErrorDescription = %s\n\n", errorDescription);
+      exit (1);
+    }
+
+  if (1)
+    out = stdout;
+  else
+    out = fopen ("Test_tree.out", "w");
+
+  if (out == NULL)
+    {
+      printf ("Output file ERROR\n");
+      exit (1);
+    }
+
+  if (0)
+    {
+      asn1_print_structure (out, definitions, "TEST_TREE", ASN1_PRINT_ALL);
+      fprintf (out, "\n");
+    }
+
+  test = test_array;
+
+  while (test->action != ACT_NULL)
+    {
+      testCounter++;
+
+      switch (test->action)
+       {
+       case ACT_CREATE:
+         result =
+           asn1_create_element (definitions, test->par1, &asn1_element);
+         break;
+       case ACT_DELETE:
+         result = asn1_delete_structure (&asn1_element);
+         break;
+       case ACT_DELETE_ELEMENT:
+         result = asn1_delete_element (asn1_element, test->par1);
+         break;
+       case ACT_WRITE:
+         if ((test->par2) && (!strcmp ("DER", test->par2)))
+           result =
+             asn1_write_value (asn1_element, test->par1, der, der_len);
+         else
+           result =
+             asn1_write_value (asn1_element, test->par1, test->par2,
+                               test->par3);
+         break;
+       case ACT_READ:
+       case ACT_READ_BIT:
+         valueLen = test->par3;
+         result =
+           asn1_read_value (asn1_element, test->par1, value, &valueLen);
+         break;
+       case ACT_READ_LENGTH:
+         valueLen = 0;
+         result =
+           asn1_read_value (asn1_element, test->par1, NULL, &valueLen);
+         break;
+       case ACT_READ_DEFINITIONS:
+         valueLen = 1024;
+         result =
+           asn1_read_value (definitions, test->par1, value, &valueLen);
+         break;
+       case ACT_READ_TAG_CLASS:
+         result = asn1_read_tag (asn1_element, test->par1, &tag, &class);
+         break;
+       case ACT_ENCODING:
+         der_len = test->par3;
+         result = asn1_der_coding (asn1_element, test->par1, der, &der_len,
+                                   errorDescription);
+         break;
+       case ACT_ENCODING_LENGTH:
+         der_len = 0;
+         result = asn1_der_coding (asn1_element, test->par1, NULL, &der_len,
+                                   errorDescription);
+         break;
+       case ACT_DECODING:
+         result = asn1_der_decoding (&asn1_element, der, der_len,
+                                     errorDescription);
+         break;
+       case ACT_DECODING_ELEMENT:
+         result =
+           asn1_der_decoding_element (&asn1_element, test->par1, der,
+                                      der_len, errorDescription);
+         break;
+       case ACT_DECODING_START_END:
+         result =
+           asn1_der_decoding_startEnd (asn1_element, der, der_len,
+                                       test->par1, &start, &end);
+         break;
+       case ACT_EXPAND_ANY:
+         result = asn1_expand_any_defined_by (definitions, &asn1_element);
+         break;
+       case ACT_EXPAND_OCTET:
+         result =
+           asn1_expand_octet_string (definitions, &asn1_element, test->par1,
+                                     test->par2);
+         break;
+       case ACT_OID_2_STRUCTURE:
+         str_p = asn1_find_structure_from_oid (definitions, test->par1);
+         break;
+       case ACT_VISIT:
+         asn1_print_structure (out, asn1_element, test->par1, test->par3);
+         fprintf (out, "\n");
+         result = ASN1_SUCCESS;
+         break;
+       case ACT_PRINT_DER:
+         printf ("DER encoding len:%i\n", der_len);
+         printf ("DER encoding: ");
+         for (k = 0; k < der_len; k++)
+           printf ("%02x ", der[k]);
+         printf ("\n\n");
+         result = ASN1_SUCCESS;
+         break;
+       case ACT_SET_DER:
+         der_len = test->par3;
+         memcpy (der, test->par1, der_len);
+         result = ASN1_SUCCESS;
+         break;
+       case ACT_NUMBER_OF_ELEMENTS:
+         result =
+           asn1_number_of_elements (asn1_element, test->par1, &valueLen);
+         break;
+       default:
+         break;
+       }
+
+
+      switch (test->action)
+       {
+       case ACT_CREATE:
+       case ACT_DELETE:
+       case ACT_DELETE_ELEMENT:
+       case ACT_WRITE:
+       case ACT_VISIT:
+       case ACT_ENCODING:
+       case ACT_DECODING:
+       case ACT_PRINT_DER:
+       case ACT_EXPAND_ANY:
+       case ACT_EXPAND_OCTET:
+       case ACT_SET_DER:
+         if (result != test->errorNumber)
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s - %s - %d\n", test->action,
+                     test->par1, test->par2, test->par3);
+             printf ("  Error expected: %s\n",
+                     asn1_strerror (test->errorNumber));
+             printf ("  Error detected: %s\n\n", asn1_strerror (result));
+           }
+         break;
+       case ACT_DECODING_ELEMENT:
+         if (result != test->errorNumber)
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s - %s - %d\n", test->action,
+                     test->par1, test->par2, test->par3);
+             printf ("  Error expected: %s\n",
+                     asn1_strerror (test->errorNumber));
+             printf ("  Error detected: %s\n", asn1_strerror (result));
+             printf ("  Error description : %s\n\n", errorDescription);
+           }
+         break;
+       case ACT_NUMBER_OF_ELEMENTS:
+       case ACT_READ_LENGTH:
+         if ((result != test->errorNumber) || (valueLen != test->par3))
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s\n", test->action, test->par1);
+             printf ("  Error expected: %s - %d\n",
+                     asn1_strerror (test->errorNumber), test->par3);
+             printf ("  Error detected: %s - %d\n\n", asn1_strerror (result),
+                     valueLen);
+           }
+         break;
+       case ACT_ENCODING_LENGTH:
+         if ((result != test->errorNumber) || (der_len != test->par3))
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s\n", test->action, test->par1);
+             printf ("  Error expected: %s - %d\n",
+                     asn1_strerror (test->errorNumber), test->par3);
+             printf ("  Error detected: %s - %d\n\n", asn1_strerror (result),
+                     der_len);
+           }
+         break;
+       case ACT_OID_2_STRUCTURE:
+         if (((test->errorNumber != ASN1_SUCCESS) && (str_p != NULL)) ||
+             ((test->errorNumber == ASN1_SUCCESS) && (str_p == NULL)) ||
+             ((test->errorNumber == ASN1_SUCCESS)
+              && (strcmp (str_p, test->par2))))
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s\n", test->action, test->par1);
+             printf ("  Error expected: %s - %s\n",
+                     asn1_strerror (test->errorNumber), test->par2);
+             printf ("  Value detected: %s\n\n", str_p);
+           }
+         break;
+       case ACT_DECODING_START_END:
+         if ((result != test->errorNumber) ||
+             ((!strcmp (test->par2, "START")) && (start != test->par3)) ||
+             ((!strcmp (test->par2, "END")) && (end != test->par3)))
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s - %d\n", test->action, test->par1,
+                     test->par3);
+             printf ("  Error expected: %s - %s - %d\n",
+                     asn1_strerror (test->errorNumber), test->par2,
+                     test->par3);
+             printf ("  Error detected: %s - %d - %d\n\n",
+                     asn1_strerror (result), start, end);
+           }
+         break;
+
+       case ACT_READ_TAG_CLASS:
+         if ((result != test->errorNumber) ||
+             ((!strcmp (test->par2, "TAG")) && (tag != test->par3)) ||
+             ((!strcmp (test->par2, "CLASS")) && (class != test->par3)))
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s - %d\n", test->action, test->par1,
+                     test->par3);
+             printf ("  Error expected: %s - %s - %d\n",
+                     asn1_strerror (test->errorNumber), test->par2,
+                     test->par3);
+             printf ("  Error detected: %s - %d - %d\n\n",
+                     asn1_strerror (result), tag, class);
+           }
+
+         break;
+
+       case ACT_READ:
+       case ACT_READ_DEFINITIONS:
+       case ACT_READ_BIT:
+         if (test->action == ACT_READ_BIT)
+           {
+             if ((valueLen - (valueLen / 8.0)) == 0)
+               tag = valueLen / 8;
+             else
+               tag = (valueLen / 8) + 1;
+             if ((test->par3 - (test->par3 / 8.0)) == 0)
+               class = test->par3 / 8;
+             else
+               class = (test->par3 / 8) + 1;
+           }
+
+         for (k = 0; k < class; k++)
+           if (test->par2[k] != value[k])
+             {
+               k = -1;
+               break;
+             }
+
+         if ((result != test->errorNumber) ||
+             (valueLen != test->par3) || (k == -1))
+           {
+             errorCounter++;
+             printf ("ERROR N. %d:\n", errorCounter);
+             printf ("  Action %d - %s\n", test->action, test->par1);
+             printf ("  Error expected: %s - %d - ",
+                     asn1_strerror (test->errorNumber), test->par3);
+             for (k = 0; k < test->par3; k++)
+               printf ("%02x", test->par2[k]);
+             printf ("\n  Error detected: %s - %d - ",
+                     asn1_strerror (result), valueLen);
+             for (k = 0; k < valueLen; k++)
+               printf ("%02x", value[k]);
+             printf ("\n\n");
+
+           }
+
+         break;
+       default:
+         break;
+       }
+
+      test++;
+    }
+
+
+  printf ("Total tests : %d\n", testCounter);
+  printf ("Total errors: %d\n", errorCounter);
+
+
+  /* Clear the definition structures */
+  asn1_delete_structure (&definitions);
+
+
+  if (out != stdout)
+    fclose (out);
+
+  if (errorCounter > 0)
+    return 1;
+
+  exit (0);
+}
diff --git a/tests/Test_tree_asn1_tab.c b/tests/Test_tree_asn1_tab.c
new file mode 100644 (file)
index 0000000..d736a19
--- /dev/null
@@ -0,0 +1,163 @@
+
+#include "libtasn1.h"
+
+const ASN1_ARRAY_TYPE Test_tree_asn1_tab[]={
+  {"TEST_TREE",536875024,0},
+  {0,1610612748,0},
+  {"iso",1073741825,"1"},
+  {"identified-organization",1073741825,"3"},
+  {"dod",1073741825,"6"},
+  {"internet",1073741825,"1"},
+  {"security",1073741825,"5"},
+  {"mechanisms",1073741825,"5"},
+  {"pkix",1073741825,"7"},
+  {"id-mod",1073741825,"0"},
+  {"id-pkix1-implicit-88",1,"2"},
+  {"KrbError",1610620933,0},
+  {0,1073746952,"30"},
+  {"pvno",536879107,0},
+  {0,4104,"0"},
+  {"CertTemplate",1610612741,0},
+  {"version",1610637315,0},
+  {0,4104,"0"},
+  {"issuer",1610637314,"Name"},
+  {0,4104,"3"},
+  {"validity",536895491,0},
+  {0,4104,"4"},
+  {"Name",1610612754,0},
+  {"rdnSequence",2,"RDNSequence"},
+  {"RDNSequence",1073741826,"RelativeDistinguishedName"},
+  {"RelativeDistinguishedName",1612709903,0},
+  {"MAX",1074266122,"1"},
+  {0,2,"AttributeTypeAndValue"},
+  {"AttributeTypeAndValue",1610612741,0},
+  {"type",1073741826,"AttributeType"},
+  {"value",2,"AttributeValue"},
+  {"AttributeType",1073741836,0},
+  {"AttributeValue",1073741837,0},
+  {"sequenceEmpty",1610612741,0},
+  {"int1",1073741827,0},
+  {"seq1",1610620930,"Sequence_octetTest1"},
+  {0,4104,"1"},
+  {"set1",536879119,0},
+  {0,1073743880,"2"},
+  {0,3,0},
+  {"IndefiniteLengthTest",1610612741,0},
+  {"seq1",1610620930,"Sequence_octetTest1"},
+  {0,4104,"1"},
+  {"set1",1610612751,0},
+  {0,12,0},
+  {"int1",3,0},
+  {"OidTest",1610612741,0},
+  {"oid3",1610653708,0},
+  {0,1073741833,"id-Test"},
+  {0,4104,"3"},
+  {"oid",1610653708,0},
+  {0,1073741833,"id-anyTest2"},
+  {0,4104,"1"},
+  {"oid2",536911884,0},
+  {0,1073741833,"id-anyTest"},
+  {0,4104,"2"},
+  {"OidAndTimeTest",1610612741,0},
+  {"set",1610612751,0},
+  {0,3,0},
+  {"oid",1073741836,0},
+  {"time2",1082130449,0},
+  {"bol",1073741828,0},
+  {"oct",1073741831,0},
+  {"bit",1073758214,0},
+  {"bol2",1610645508,0},
+  {0,65545,0},
+  {"enum",1610907669,0},
+  {0,1073741833,"v1"},
+  {"v1",1073741825,"1"},
+  {"v2",1,"2"},
+  {"any",1610637325,0},
+  {0,4104,"1"},
+  {"gen",1073758235,0},
+  {"time1",16777233,0},
+  {"SequenceTestTag",1610612741,0},
+  {"int1",1610620931,0},
+  {0,2056,"2"},
+  {"int2",1610620931,0},
+  {0,4104,"3"},
+  {"str1",1610620930,"PrintableString"},
+  {0,4104,"1"},
+  {"str2",1073741826,"UniversalString"},
+  {"str3",536879106,"UniversalString"},
+  {0,2056,"2"},
+  {"Sequence1",1610612741,0},
+  {"int1",1610915843,0},
+  {0,1073741833,"v2"},
+  {0,1073745928,"0"},
+  {"v1",1073741825,"0"},
+  {"v2",1073741825,"1"},
+  {"v3",1,"2"},
+  {"int2",1073741827,0},
+  {"seq",1610612751,0},
+  {0,3,0},
+  {"id",1073741836,0},
+  {"oct",1073741831,0},
+  {"any1",541081613,0},
+  {"id",1,0},
+  {"DHParameter",1610612741,0},
+  {"prime",1073741827,0},
+  {"base",1073741827,0},
+  {"privateValueLength",16387,0},
+  {"id-octetTest1",1879048204,0},
+  {0,1073741825,"1"},
+  {0,1073741825,"2"},
+  {0,1073741825,"3"},
+  {0,1,"4"},
+  {"Sequence_octetTest1",1610612741,0},
+  {"int",16387,0},
+  {"AnyTest2",1610612754,0},
+  {"str",1073741831,0},
+  {"int",3,0},
+  {"id-ic",1879048204,0},
+  {0,1073741825,"2"},
+  {0,1,"5"},
+  {"id-anyTest",1879048204,0},
+  {0,1073741825,"id-ic"},
+  {0,1073741825,"29"},
+  {0,1,"1"},
+  {"id-anyTest2",1879048204,0},
+  {0,1073741825,"id-ic"},
+  {0,1073741825,"29"},
+  {0,1,"2"},
+  {"anyTest2",1073741827,0},
+  {"VisibleString",1610620935,0},
+  {0,4360,"26"},
+  {"NumericString",1610620935,0},
+  {0,4360,"18"},
+  {"IA5String",1610620935,0},
+  {0,4360,"22"},
+  {"TeletexString",1610620935,0},
+  {0,4360,"20"},
+  {"PrintableString",1610620935,0},
+  {0,4360,"19"},
+  {"UniversalString",1610620935,0},
+  {0,4360,"28"},
+  {"BMPString",1610620935,0},
+  {0,4360,"30"},
+  {"UTF8String",1610620935,0},
+  {0,4360,"12"},
+  {"Test3",1610612741,0},
+  {"a",1073741827,0},
+  {"b",536879106,"GeneralString2"},
+  {0,2056,"1"},
+  {"GeneralString2",1610620955,0},
+  {0,2056,"2"},
+  {"X520LocalityName",1610612754,0},
+  {"teletexString",1073741826,"TeletexString"},
+  {"printableString",1073741826,"PrintableString"},
+  {"universalString",1073741826,"UniversalString"},
+  {"utf8String",1073741826,"UTF8String"},
+  {"bmpString",2,"BMPString"},
+  {"id-Test",805306380,0},
+  {0,1073741825,"1"},
+  {0,1073741825,"2"},
+  {0,1073741825,"29"},
+  {0,1,"2"},
+  {0,0,0}
+};
diff --git a/tests/crlf b/tests/crlf
new file mode 100755 (executable)
index 0000000..67637e3
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation,
+# Inc.
+#
+# Author: Simon Josefsson
+#
+# 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/>.
+
+set -e
+
+srcdir=${srcdir:-.}
+ASN1DECODING=../src/asn1Decoding${EXEEXT}
+
+# The crlf.cer file is a normal certificate which contains bytes 0x0A
+# (LF), 0x0D (CF), and 0xFF (EOF), all are known to cause failures
+# when using fopen/fgetc/fscanf on streams on some systems (read:
+# Windows).
+
+$ASN1DECODING \
+    $srcdir/../examples/pkix.asn \
+    $srcdir/crlf.cer \
+    PKIX1Implicit88.Certificate
diff --git a/tests/crlf.cer b/tests/crlf.cer
new file mode 100644 (file)
index 0000000..534e7e6
Binary files /dev/null and b/tests/crlf.cer differ
diff --git a/tests/pkix.asn b/tests/pkix.asn
new file mode 100644 (file)
index 0000000..b23f2c9
--- /dev/null
@@ -0,0 +1,1259 @@
+
+PKIX1 { }
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+-- This contains both PKIX1Implicit88 and RFC2630 ASN.1 modules.
+
+-- ISO arc for standard certificate and CRL extensions
+
+id-ce OBJECT IDENTIFIER  ::=  {joint-iso-ccitt(2) ds(5) 29}
+
+
+-- authority key identifier OID and syntax
+
+id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
+
+AuthorityKeyIdentifier ::= SEQUENCE {
+      keyIdentifier             [0] KeyIdentifier            OPTIONAL,
+      authorityCertIssuer       [1] GeneralNames             OPTIONAL,
+      authorityCertSerialNumber [2] CertificateSerialNumber  OPTIONAL }
+    -- authorityCertIssuer and authorityCertSerialNumber shall both
+    -- be present or both be absgent
+
+KeyIdentifier ::= OCTET STRING
+
+-- subject key identifier OID and syntax
+
+id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 14 }
+
+SubjectKeyIdentifier ::= KeyIdentifier
+
+-- key usage extension OID and syntax
+
+id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
+
+KeyUsage ::= BIT STRING {
+     digitalSignature        (0),
+     nonRepudiation          (1),
+     keyEncipherment         (2),
+     dataEncipherment        (3),
+     keyAgreement            (4),
+     keyCertSign             (5),
+     cRLSign                 (6),
+     encipherOnly            (7),
+     decipherOnly            (8) }
+
+-- private key usage period extension OID and syntax
+
+id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::=  { id-ce 16 }
+
+PrivateKeyUsagePeriod ::= SEQUENCE {
+     notBefore       [0]     GeneralizedTime OPTIONAL,
+     notAfter        [1]     GeneralizedTime OPTIONAL }
+     -- either notBefore or notAfter shall be present
+
+-- certificate policies extension OID and syntax
+
+id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }
+
+CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
+
+PolicyInformation ::= SEQUENCE {
+     policyIdentifier   CertPolicyId,
+     policyQualifiers   SEQUENCE SIZE (1..MAX) OF
+             PolicyQualifierInfo OPTIONAL }
+
+CertPolicyId ::= OBJECT IDENTIFIER
+
+PolicyQualifierInfo ::= SEQUENCE {
+       policyQualifierId  PolicyQualifierId,
+       qualifier        ANY DEFINED BY policyQualifierId }
+
+-- Implementations that recognize additional policy qualifiers shall
+-- augment the following definition for PolicyQualifierId
+
+PolicyQualifierId ::=
+    OBJECT IDENTIFIER  -- ( id-qt-cps | id-qt-unotice )
+
+-- CPS pointer qualifier
+
+CPSuri ::= IA5String
+
+-- user notice qualifier
+
+UserNotice ::= SEQUENCE {
+     noticeRef        NoticeReference OPTIONAL,
+     explicitText     DisplayText OPTIONAL}
+
+NoticeReference ::= SEQUENCE {
+     organization     DisplayText,
+     noticeNumbers    SEQUENCE OF INTEGER }
+
+DisplayText ::= CHOICE {
+     visibleString    VisibleString  (SIZE (1..200)),
+     bmpString        BMPString      (SIZE (1..200)),
+     utf8String       UTF8String     (SIZE (1..200)) }
+
+-- policy mapping extension OID and syntax
+
+id-ce-policyMappings OBJECT IDENTIFIER ::=  { id-ce 33 }
+
+PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
+     issuerDomainPolicy      CertPolicyId,
+     subjectDomainPolicy     CertPolicyId }
+
+-- subject alternative name extension OID and syntax
+
+-- Directory string type --
+
+DirectoryString ::= CHOICE {
+      teletexString             TeletexString (SIZE (1..MAX)),
+      printableString           PrintableString (SIZE (1..MAX)),
+      universalString           UniversalString (SIZE (1..MAX)),
+      utf8String              UTF8String (SIZE (1..MAX)),
+      bmpString               BMPString (SIZE(1..MAX)),
+      -- IA5String is added here to handle old UID encoded as ia5String --
+      -- See tests/userid/ for more information.  It shouldn't be here, --
+      -- so if it causes problems, considering dropping it. --
+      ia5String               IA5String (SIZE(1..MAX)) }
+
+id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }
+
+SubjectAltName ::= GeneralNames
+
+GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
+
+GeneralName ::= CHOICE {
+     otherName                       [0]     AnotherName,
+     rfc822Name                      [1]     IA5String,
+     dNSName                         [2]     IA5String,
+     x400Address                     [3]     ORAddress,
+-- Changed to work with the libtasn1 parser.
+     directoryName                   [4]     EXPLICIT RDNSequence, --Name,
+     ediPartyName                    [5]     EDIPartyName,
+     uniformResourceIdentifier       [6]     IA5String,
+     iPAddress                       [7]     OCTET STRING,
+     registeredID                    [8]     OBJECT IDENTIFIER }
+
+-- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as
+-- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax
+
+AnotherName ::= SEQUENCE {
+     type-id    OBJECT IDENTIFIER,
+     value      [0] EXPLICIT ANY DEFINED BY type-id }
+
+EDIPartyName ::= SEQUENCE {
+     nameAssigner            [0]     DirectoryString OPTIONAL,
+     partyName               [1]     DirectoryString }
+
+-- issuer alternative name extension OID and syntax
+
+id-ce-issuerAltName OBJECT IDENTIFIER ::=  { id-ce 18 }
+
+IssuerAltName ::= GeneralNames
+
+id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::=  { id-ce 9 }
+
+SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute
+
+-- basic constraints extension OID and syntax
+
+id-ce-basicConstraints OBJECT IDENTIFIER ::=  { id-ce 19 }
+
+BasicConstraints ::= SEQUENCE {
+     cA                      BOOLEAN DEFAULT FALSE,
+     pathLenConstraint       INTEGER (0..MAX) OPTIONAL }
+
+-- name constraints extension OID and syntax
+
+id-ce-nameConstraints OBJECT IDENTIFIER ::=  { id-ce 30 }
+
+NameConstraints ::= SEQUENCE {
+     permittedSubtrees       [0]     GeneralSubtrees OPTIONAL,
+     excludedSubtrees        [1]     GeneralSubtrees OPTIONAL }
+
+GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
+
+GeneralSubtree ::= SEQUENCE {
+     base                    GeneralName,
+     minimum         [0]     BaseDistance DEFAULT 0,
+     maximum         [1]     BaseDistance OPTIONAL }
+
+BaseDistance ::= INTEGER (0..MAX)
+
+-- policy constraints extension OID and syntax
+
+id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }
+
+PolicyConstraints ::= SEQUENCE {
+     requireExplicitPolicy           [0] SkipCerts OPTIONAL,
+     inhibitPolicyMapping            [1] SkipCerts OPTIONAL }
+
+SkipCerts ::= INTEGER (0..MAX)
+
+-- CRL distribution points extension OID and syntax
+
+id-ce-cRLDistributionPoints     OBJECT IDENTIFIER  ::=  {id-ce 31}
+
+CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
+
+DistributionPoint ::= SEQUENCE {
+     distributionPoint       [0]     EXPLICIT DistributionPointName OPTIONAL,
+     reasons                 [1]     ReasonFlags OPTIONAL,
+     cRLIssuer               [2]     GeneralNames OPTIONAL
+}
+
+DistributionPointName ::= CHOICE {
+    fullName                [0]     GeneralNames,
+    nameRelativeToCRLIssuer [1]     RelativeDistinguishedName
+}
+
+ReasonFlags ::= BIT STRING {
+     unused                  (0),
+     keyCompromise           (1),
+     cACompromise            (2),
+     affiliationChanged      (3),
+     superseded              (4),
+     cessationOfOperation    (5),
+     certificateHold         (6),
+     privilegeWithdrawn      (7),
+     aACompromise            (8) }
+
+-- extended key usage extension OID and syntax
+
+id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
+
+ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
+
+KeyPurposeId ::= OBJECT IDENTIFIER
+
+-- extended key purpose OIDs
+id-kp-serverAuth      OBJECT IDENTIFIER ::= { id-kp 1 }
+id-kp-clientAuth      OBJECT IDENTIFIER ::= { id-kp 2 }
+id-kp-codeSigning     OBJECT IDENTIFIER ::= { id-kp 3 }
+id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 }
+id-kp-ipsecEndSystem  OBJECT IDENTIFIER ::= { id-kp 5 }
+id-kp-ipsecTunnel     OBJECT IDENTIFIER ::= { id-kp 6 }
+id-kp-ipsecUser       OBJECT IDENTIFIER ::= { id-kp 7 }
+id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }
+
+-- authority info access
+
+id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 }
+
+AuthorityInfoAccessSyntax  ::=
+        SEQUENCE SIZE (1..MAX) OF AccessDescription
+
+AccessDescription  ::=  SEQUENCE {
+        accessMethod          OBJECT IDENTIFIER,
+        accessLocation        GeneralName  }
+
+-- CRL number extension OID and syntax
+
+id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 }
+
+CRLNumber ::= INTEGER (0..MAX)
+
+-- issuing distribution point extension OID and syntax
+
+id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
+
+IssuingDistributionPoint ::= SEQUENCE {
+     distributionPoint       [0] DistributionPointName OPTIONAL,
+     onlyContainsUserCerts   [1] BOOLEAN DEFAULT FALSE,
+     onlyContainsCACerts     [2] BOOLEAN DEFAULT FALSE,
+     onlySomeReasons         [3] ReasonFlags OPTIONAL,
+     indirectCRL             [4] BOOLEAN DEFAULT FALSE }
+
+
+id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 }
+
+-- deltaCRLIndicator ::= BaseCRLNumber
+
+BaseCRLNumber ::= CRLNumber
+
+-- CRL reasons extension OID and syntax
+
+id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 }
+
+CRLReason ::= ENUMERATED {
+     unspecified             (0),
+     keyCompromise           (1),
+     cACompromise            (2),
+     affiliationChanged      (3),
+     superseded              (4),
+     cessationOfOperation    (5),
+     certificateHold         (6),
+     removeFromCRL           (8) }
+
+-- certificate issuer CRL entry extension OID and syntax
+
+id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 }
+
+CertificateIssuer ::= GeneralNames
+
+-- hold instruction extension OID and syntax
+
+id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 }
+
+HoldInstructionCode ::= OBJECT IDENTIFIER
+
+-- ANSI x9 holdinstructions
+
+-- ANSI x9 arc holdinstruction arc
+holdInstruction OBJECT IDENTIFIER ::=
+          {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2}
+
+-- ANSI X9 holdinstructions referenced by this standard
+id-holdinstruction-none OBJECT IDENTIFIER  ::=
+                {holdInstruction 1} -- deprecated
+id-holdinstruction-callissuer OBJECT IDENTIFIER ::=
+                {holdInstruction 2}
+id-holdinstruction-reject OBJECT IDENTIFIER ::=
+                {holdInstruction 3}
+
+-- invalidity date CRL entry extension OID and syntax
+
+id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 }
+
+InvalidityDate ::=  GeneralizedTime
+
+
+-- --------------------------------------
+--  EXPLICIT
+-- --------------------------------------
+
+-- UNIVERSAL Types defined in '93 and '98 ASN.1
+-- but required by this specification
+
+VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING
+
+NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING
+
+IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING
+
+TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING
+
+PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING
+
+UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING
+        -- UniversalString is defined in ASN.1:1993
+
+BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING
+      -- BMPString is the subtype of UniversalString and models
+       -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1
+
+UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
+        -- The content of this type conforms to RFC 2279.
+
+
+-- PKIX specific OIDs
+
+id-pkix  OBJECT IDENTIFIER  ::=
+         { iso(1) identified-organization(3) dod(6) internet(1)
+                    security(5) mechanisms(5) pkix(7) }
+
+-- PKIX arcs
+
+id-pe OBJECT IDENTIFIER  ::=  { id-pkix 1 }
+        -- arc for private certificate extensions
+id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
+        -- arc for policy qualifier types
+id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
+        -- arc for extended key purpose OIDS
+id-ad OBJECT IDENTIFIER ::= { id-pkix 48 }
+        -- arc for access descriptors
+
+-- policyQualifierIds for Internet policy qualifiers
+
+id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
+        -- OID for CPS qualifier
+id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
+        -- OID for user notice qualifier
+
+-- access descriptor definitions
+
+id-ad-ocsp      OBJECT IDENTIFIER ::= { id-ad 1 }
+id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 }
+
+-- attribute data types --
+
+Attribute       ::=     SEQUENCE {
+        type            AttributeType,
+        values  SET OF AttributeValue
+                -- at least one value is required --
+}
+
+AttributeType           ::=   OBJECT IDENTIFIER
+
+AttributeValue          ::=   ANY DEFINED BY type
+
+AttributeTypeAndValue           ::=     SEQUENCE {
+        type    AttributeType,
+        value   AttributeValue }
+
+-- suggested naming attributes: Definition of the following
+--  information object set may be augmented to meet local
+--  requirements.  Note that deleting members of the set may
+--  prevent interoperability with conforming implementations.
+--  presented in pairs: the AttributeType followed by the
+--  type definition for the corresponding AttributeValue
+
+-- Arc for standard naming attributes
+id-at           OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4}
+
+-- Attributes of type NameDirectoryString
+id-at-initials          AttributeType ::= { id-at 43 }
+X520initials ::= DirectoryString
+
+id-at-generationQualifier AttributeType ::= { id-at 44 }
+X520generationQualifier ::= DirectoryString
+
+id-at-surname           AttributeType ::= { id-at 4 }
+X520surName ::= DirectoryString
+
+id-at-givenName         AttributeType ::= { id-at 42 }
+X520givenName ::= DirectoryString
+
+id-at-name              AttributeType ::= { id-at 41 }
+X520name        ::= DirectoryString
+
+id-at-commonName        AttributeType   ::=     {id-at 3}
+X520CommonName  ::=      DirectoryString
+
+id-at-localityName      AttributeType   ::=     {id-at 7}
+X520LocalityName ::= DirectoryString
+
+id-at-stateOrProvinceName       AttributeType   ::=     {id-at 8}
+X520StateOrProvinceName         ::= DirectoryString
+
+id-at-organizationName          AttributeType   ::=     {id-at 10}
+X520OrganizationName ::= DirectoryString
+
+id-at-organizationalUnitName    AttributeType   ::=     {id-at 11}
+X520OrganizationalUnitName ::= DirectoryString
+
+id-at-title     AttributeType   ::=     {id-at 12}
+X520Title ::=   DirectoryString
+
+id-at-description     AttributeType   ::=     {id-at 13}
+X520Description ::=   DirectoryString
+
+id-at-dnQualifier       AttributeType   ::=     {id-at 46}
+X520dnQualifier ::=     PrintableString
+
+id-at-countryName       AttributeType   ::=     {id-at 6}
+X520countryName ::=     PrintableString (SIZE (2)) -- IS 3166 codes
+
+id-at-serialNumber       AttributeType   ::=     {id-at 5}
+X520serialNumber ::=     PrintableString
+
+id-at-telephoneNumber       AttributeType   ::=     {id-at 20}
+X520telephoneNumber ::=     PrintableString
+
+id-at-facsimileTelephoneNumber       AttributeType   ::=     {id-at 23}
+X520facsimileTelephoneNumber ::=     PrintableString
+
+id-at-pseudonym                AttributeType   ::=     {id-at 65}
+X520pseudonym ::=      DirectoryString
+
+id-at-name     AttributeType   ::=     {id-at 41}
+X520name ::=   DirectoryString
+
+id-at-streetAddress    AttributeType   ::=     {id-at 9}
+X520streetAddress ::=  DirectoryString
+
+id-at-postalAddress    AttributeType   ::=     {id-at 16}
+X520postalAddress ::= PostalAddress
+
+PostalAddress ::= SEQUENCE OF DirectoryString
+
+
+ -- Legacy attributes
+
+pkcs OBJECT IDENTIFIER ::=
+       { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) }
+
+pkcs-9 OBJECT IDENTIFIER ::=
+       { pkcs 9 }
+
+
+emailAddress AttributeType      ::= { pkcs-9 1 }
+
+Pkcs9email ::= IA5String (SIZE (1..ub-emailaddress-length))
+
+-- naming data types --
+
+Name            ::=   CHOICE { -- only one possibility for now --
+                                 rdnSequence  RDNSequence }
+
+RDNSequence     ::=   SEQUENCE OF RelativeDistinguishedName
+
+DistinguishedName       ::=   RDNSequence
+
+RelativeDistinguishedName  ::=
+                    SET SIZE (1 .. MAX) OF AttributeTypeAndValue
+
+
+
+-- --------------------------------------------------------
+-- certificate and CRL specific structures begin here
+-- --------------------------------------------------------
+
+Certificate  ::=  SEQUENCE  {
+     tbsCertificate       TBSCertificate,
+     signatureAlgorithm   AlgorithmIdentifier,
+     signature            BIT STRING  }
+
+TBSCertificate  ::=  SEQUENCE  {
+     version         [0]  EXPLICIT Version DEFAULT v1,
+     serialNumber         CertificateSerialNumber,
+     signature            AlgorithmIdentifier,
+     issuer               Name,
+     validity             Validity,
+     subject              Name,
+     subjectPublicKeyInfo SubjectPublicKeyInfo,
+     issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
+                          -- If present, version shall be v2 or v3
+     subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
+                          -- If present, version shall be v2 or v3
+     extensions      [3]  EXPLICIT Extensions OPTIONAL
+                          -- If present, version shall be v3 --
+}
+
+Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
+
+CertificateSerialNumber  ::=  INTEGER
+
+Validity ::= SEQUENCE {
+     notBefore      Time,
+     notAfter       Time }
+
+Time ::= CHOICE {
+     utcTime        UTCTime,
+     generalTime    GeneralizedTime }
+
+UniqueIdentifier  ::=  BIT STRING
+
+SubjectPublicKeyInfo  ::=  SEQUENCE  {
+     algorithm            AlgorithmIdentifier,
+     subjectPublicKey     BIT STRING  }
+
+Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
+
+Extension  ::=  SEQUENCE  {
+     extnID      OBJECT IDENTIFIER,
+     critical    BOOLEAN DEFAULT FALSE,
+     extnValue   OCTET STRING  }
+
+
+-- ------------------------------------------
+-- CRL structures
+-- ------------------------------------------
+
+CertificateList  ::=  SEQUENCE  {
+     tbsCertList          TBSCertList,
+     signatureAlgorithm   AlgorithmIdentifier,
+     signature            BIT STRING  }
+
+TBSCertList  ::=  SEQUENCE  {
+     version                 Version OPTIONAL,
+                                  -- if present, shall be v2
+     signature               AlgorithmIdentifier,
+     issuer                  Name,
+     thisUpdate              Time,
+     nextUpdate              Time OPTIONAL,
+     revokedCertificates     SEQUENCE OF SEQUENCE  {
+          userCertificate         CertificateSerialNumber,
+          revocationDate          Time,
+          crlEntryExtensions      Extensions OPTIONAL
+                                         -- if present, shall be v2
+                               }  OPTIONAL,
+     crlExtensions           [0] EXPLICIT Extensions OPTIONAL
+                                         -- if present, shall be v2 --
+}
+
+-- Version, Time, CertificateSerialNumber, and Extensions were
+-- defined earlier for use in the certificate structure
+
+AlgorithmIdentifier  ::=  SEQUENCE  {
+     algorithm               OBJECT IDENTIFIER,
+     parameters              ANY DEFINED BY algorithm OPTIONAL  }
+                                -- contains a value of the type
+                                -- registered for use with the
+                                -- algorithm object identifier value
+
+-- Algorithm OIDs and parameter structures
+
+pkcs-1 OBJECT IDENTIFIER ::= {
+     pkcs 1 }
+
+rsaEncryption OBJECT IDENTIFIER ::=  { pkcs-1 1 }
+
+md2WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 2 }
+
+md5WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 4 }
+
+sha1WithRSAEncryption OBJECT IDENTIFIER  ::=  { pkcs-1 5 }
+
+id-dsa-with-sha1 OBJECT IDENTIFIER ::=  {
+     iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 }
+
+Dss-Sig-Value ::= SEQUENCE {
+     r       INTEGER,
+     s       INTEGER
+}
+
+dhpublicnumber OBJECT IDENTIFIER ::= {
+     iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 }
+
+DomainParameters ::= SEQUENCE {
+     p       INTEGER, -- odd prime, p=jq +1
+     g       INTEGER, -- generator, g
+     q       INTEGER, -- factor of p-1
+     j       INTEGER OPTIONAL, -- subgroup factor, j>= 2
+     validationParms  ValidationParms OPTIONAL }
+
+ValidationParms ::= SEQUENCE {
+     seed             BIT STRING,
+     pgenCounter      INTEGER }
+
+id-dsa OBJECT IDENTIFIER ::= {
+     iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 }
+
+Dss-Parms  ::=  SEQUENCE  {
+     p             INTEGER,
+     q             INTEGER,
+     g             INTEGER  }
+
+-- x400 address syntax starts here
+--      OR Names
+
+ORAddress ::= SEQUENCE {
+   built-in-standard-attributes BuiltInStandardAttributes,
+   built-in-domain-defined-attributes
+                        BuiltInDomainDefinedAttributes OPTIONAL,
+   -- see also teletex-domain-defined-attributes
+   extension-attributes ExtensionAttributes OPTIONAL }
+--      The OR-address is semantically absent from the OR-name if the
+--      built-in-standard-attribute sequence is empty and the
+--      built-in-domain-defined-attributes and extension-attributes are
+--      both omitted.
+
+--      Built-in Standard Attributes
+
+BuiltInStandardAttributes ::= SEQUENCE {
+   country-name CountryName OPTIONAL,
+   administration-domain-name AdministrationDomainName OPTIONAL,
+   network-address      [0] EXPLICIT NetworkAddress OPTIONAL,
+   -- see also extended-network-address
+   terminal-identifier  [1] EXPLICIT TerminalIdentifier OPTIONAL,
+   private-domain-name  [2] EXPLICIT PrivateDomainName OPTIONAL,
+   organization-name    [3] EXPLICIT OrganizationName OPTIONAL,
+   -- see also teletex-organization-name
+   numeric-user-identifier      [4] EXPLICIT NumericUserIdentifier OPTIONAL,
+   personal-name        [5] EXPLICIT PersonalName OPTIONAL,
+   -- see also teletex-personal-name
+   organizational-unit-names    [6] EXPLICIT OrganizationalUnitNames OPTIONAL
+   -- see also teletex-organizational-unit-names --
+}
+
+CountryName ::= [APPLICATION 1] CHOICE {
+   x121-dcc-code NumericString
+                (SIZE (ub-country-name-numeric-length)),
+   iso-3166-alpha2-code PrintableString
+                (SIZE (ub-country-name-alpha-length)) }
+
+AdministrationDomainName ::= [APPLICATION 2] EXPLICIT CHOICE {
+   numeric NumericString (SIZE (0..ub-domain-name-length)),
+   printable PrintableString (SIZE (0..ub-domain-name-length)) }
+
+NetworkAddress ::= X121Address  -- see also extended-network-address
+
+X121Address ::= NumericString (SIZE (1..ub-x121-address-length))
+
+TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length))
+
+PrivateDomainName ::= CHOICE {
+   numeric NumericString (SIZE (1..ub-domain-name-length)),
+   printable PrintableString (SIZE (1..ub-domain-name-length)) }
+
+OrganizationName ::= PrintableString
+                            (SIZE (1..ub-organization-name-length))
+-- see also teletex-organization-name
+
+NumericUserIdentifier ::= NumericString
+                            (SIZE (1..ub-numeric-user-id-length))
+
+PersonalName ::= SET {
+   surname [0] PrintableString (SIZE (1..ub-surname-length)),
+   given-name [1] PrintableString
+                        (SIZE (1..ub-given-name-length)) OPTIONAL,
+   initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL,
+   generation-qualifier [3] PrintableString
+                (SIZE (1..ub-generation-qualifier-length)) OPTIONAL }
+-- see also teletex-personal-name
+
+OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units)
+                                        OF OrganizationalUnitName
+-- see also teletex-organizational-unit-names
+
+OrganizationalUnitName ::= PrintableString (SIZE
+                        (1..ub-organizational-unit-name-length))
+
+--      Built-in Domain-defined Attributes
+
+BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE
+                                (1..ub-domain-defined-attributes) OF
+                                BuiltInDomainDefinedAttribute
+
+BuiltInDomainDefinedAttribute ::= SEQUENCE {
+   type PrintableString (SIZE
+                        (1..ub-domain-defined-attribute-type-length)),
+   value PrintableString (SIZE
+                        (1..ub-domain-defined-attribute-value-length))}
+
+--      Extension Attributes
+
+ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF
+                        ExtensionAttribute
+
+ExtensionAttribute ::=  SEQUENCE {
+   extension-attribute-type [0] EXPLICIT INTEGER (0..ub-extension-attributes),
+   extension-attribute-value [1] EXPLICIT
+                        ANY DEFINED BY extension-attribute-type }
+
+-- Extension types and attribute values
+--
+
+common-name INTEGER ::= 1
+
+CommonName ::= PrintableString (SIZE (1..ub-common-name-length))
+
+teletex-common-name INTEGER ::= 2
+
+TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length))
+
+teletex-organization-name INTEGER ::= 3
+
+TeletexOrganizationName ::=
+                TeletexString (SIZE (1..ub-organization-name-length))
+
+teletex-personal-name INTEGER ::= 4
+
+TeletexPersonalName ::= SET {
+   surname [0] EXPLICIT TeletexString (SIZE (1..ub-surname-length)),
+   given-name [1] EXPLICIT TeletexString
+                (SIZE (1..ub-given-name-length)) OPTIONAL,
+   initials [2] EXPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL,
+   generation-qualifier [3] EXPLICIT TeletexString (SIZE
+                (1..ub-generation-qualifier-length)) OPTIONAL }
+
+teletex-organizational-unit-names INTEGER ::= 5
+
+TeletexOrganizationalUnitNames ::= SEQUENCE SIZE
+        (1..ub-organizational-units) OF TeletexOrganizationalUnitName
+
+TeletexOrganizationalUnitName ::= TeletexString
+                        (SIZE (1..ub-organizational-unit-name-length))
+
+pds-name INTEGER ::= 7
+
+PDSName ::= PrintableString (SIZE (1..ub-pds-name-length))
+
+physical-delivery-country-name INTEGER ::= 8
+
+PhysicalDeliveryCountryName ::= CHOICE {
+   x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)),
+   iso-3166-alpha2-code PrintableString
+                        (SIZE (ub-country-name-alpha-length)) }
+
+postal-code INTEGER ::= 9
+
+PostalCode ::= CHOICE {
+   numeric-code NumericString (SIZE (1..ub-postal-code-length)),
+   printable-code PrintableString (SIZE (1..ub-postal-code-length)) }
+
+physical-delivery-office-name INTEGER ::= 10
+
+PhysicalDeliveryOfficeName ::= PDSParameter
+
+physical-delivery-office-number INTEGER ::= 11
+
+PhysicalDeliveryOfficeNumber ::= PDSParameter
+
+extension-OR-address-components INTEGER ::= 12
+
+ExtensionORAddressComponents ::= PDSParameter
+
+physical-delivery-personal-name INTEGER ::= 13
+
+PhysicalDeliveryPersonalName ::= PDSParameter
+
+physical-delivery-organization-name INTEGER ::= 14
+
+PhysicalDeliveryOrganizationName ::= PDSParameter
+
+extension-physical-delivery-address-components INTEGER ::= 15
+
+ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter
+
+unformatted-postal-address INTEGER ::= 16
+
+UnformattedPostalAddress ::= SET {
+   printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF
+           PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL,
+   teletex-string TeletexString
+         (SIZE (1..ub-unformatted-address-length)) OPTIONAL }
+
+street-address INTEGER ::= 17
+
+StreetAddress ::= PDSParameter
+
+post-office-box-address INTEGER ::= 18
+
+PostOfficeBoxAddress ::= PDSParameter
+
+poste-restante-address INTEGER ::= 19
+
+PosteRestanteAddress ::= PDSParameter
+
+unique-postal-name INTEGER ::= 20
+
+UniquePostalName ::= PDSParameter
+
+local-postal-attributes INTEGER ::= 21
+
+LocalPostalAttributes ::= PDSParameter
+
+PDSParameter ::= SET {
+   printable-string PrintableString
+                (SIZE(1..ub-pds-parameter-length)) OPTIONAL,
+   teletex-string TeletexString
+                (SIZE(1..ub-pds-parameter-length)) OPTIONAL }
+
+extended-network-address INTEGER ::= 22
+
+ExtendedNetworkAddress ::= CHOICE {
+   e163-4-address SEQUENCE {
+        number [0] EXPLICIT NumericString (SIZE (1..ub-e163-4-number-length)),
+        sub-address [1] EXPLICIT NumericString
+                (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL },
+   psap-address [0] EXPLICIT PresentationAddress }
+
+PresentationAddress ::= SEQUENCE {
+        pSelector       [0] EXPLICIT OCTET STRING OPTIONAL,
+        sSelector       [1] EXPLICIT OCTET STRING OPTIONAL,
+        tSelector       [2] EXPLICIT OCTET STRING OPTIONAL,
+        nAddresses      [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING }
+
+terminal-type  INTEGER ::= 23
+
+TerminalType ::= INTEGER {
+   telex (3),
+   teletex (4),
+   g3-facsimile (5),
+   g4-facsimile (6),
+   ia5-terminal (7),
+   videotex (8) } -- (0..ub-integer-options)
+
+--      Extension Domain-defined Attributes
+
+teletex-domain-defined-attributes INTEGER ::= 6
+
+TeletexDomainDefinedAttributes ::= SEQUENCE SIZE
+   (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute
+
+TeletexDomainDefinedAttribute ::= SEQUENCE {
+        type TeletexString
+               (SIZE (1..ub-domain-defined-attribute-type-length)),
+        value TeletexString
+               (SIZE (1..ub-domain-defined-attribute-value-length)) }
+
+--  specifications of Upper Bounds shall be regarded as mandatory
+--  from Annex B of ITU-T X.411 Reference Definition of MTS Parameter
+--  Upper Bounds
+
+--      Upper Bounds
+ub-name INTEGER ::=     32768
+ub-common-name  INTEGER ::=     64
+ub-locality-name        INTEGER ::=     128
+ub-state-name   INTEGER ::=     128
+ub-organization-name    INTEGER ::=     64
+ub-organizational-unit-name     INTEGER ::=     64
+ub-title        INTEGER ::=     64
+ub-match        INTEGER ::=     128
+
+ub-emailaddress-length INTEGER ::= 128
+
+ub-common-name-length INTEGER ::= 64
+ub-country-name-alpha-length INTEGER ::= 2
+ub-country-name-numeric-length INTEGER ::= 3
+ub-domain-defined-attributes INTEGER ::= 4
+ub-domain-defined-attribute-type-length INTEGER ::= 8
+ub-domain-defined-attribute-value-length INTEGER ::= 128
+ub-domain-name-length INTEGER ::= 16
+ub-extension-attributes INTEGER ::= 256
+ub-e163-4-number-length INTEGER ::= 15
+ub-e163-4-sub-address-length INTEGER ::= 40
+ub-generation-qualifier-length INTEGER ::= 3
+ub-given-name-length INTEGER ::= 16
+ub-initials-length INTEGER ::= 5
+ub-integer-options INTEGER ::= 256
+ub-numeric-user-id-length INTEGER ::= 32
+ub-organization-name-length INTEGER ::= 64
+ub-organizational-unit-name-length INTEGER ::= 32
+ub-organizational-units INTEGER ::= 4
+ub-pds-name-length INTEGER ::= 16
+ub-pds-parameter-length INTEGER ::= 30
+ub-pds-physical-address-lines INTEGER ::= 6
+ub-postal-code-length INTEGER ::= 16
+ub-surname-length INTEGER ::= 40
+ub-terminal-id-length INTEGER ::= 24
+ub-unformatted-address-length INTEGER ::= 180
+ub-x121-address-length INTEGER ::= 16
+
+-- Note - upper bounds on string types, such as TeletexString, are
+-- measured in characters.  Excepting PrintableString or IA5String, a
+-- significantly greater number of octets will be required to hold
+-- such a value.  As a minimum, 16 octets, or twice the specified upper
+-- bound, whichever is the larger, should be allowed for TeletexString.
+-- For UTF8String or UniversalString at least four times the upper
+-- bound should be allowed.
+
+
+
+-- END of PKIX1Implicit88
+
+
+-- BEGIN of RFC2630
+
+-- Cryptographic Message Syntax
+
+pkcs-7-ContentInfo ::= SEQUENCE {
+  contentType pkcs-7-ContentType,
+  content [0] EXPLICIT ANY DEFINED BY contentType }
+
+pkcs-7-DigestInfo ::= SEQUENCE {
+  digestAlgorithm pkcs-7-DigestAlgorithmIdentifier,
+  digest pkcs-7-Digest
+}
+
+pkcs-7-Digest ::= OCTET STRING
+
+pkcs-7-ContentType ::= OBJECT IDENTIFIER
+
+pkcs-7-SignedData ::= SEQUENCE {
+  version pkcs-7-CMSVersion,
+  digestAlgorithms pkcs-7-DigestAlgorithmIdentifiers,
+  encapContentInfo pkcs-7-EncapsulatedContentInfo,
+  certificates [0] IMPLICIT pkcs-7-CertificateSet OPTIONAL,
+  crls [1] IMPLICIT pkcs-7-CertificateRevocationLists OPTIONAL,
+  signerInfos pkcs-7-SignerInfos
+}
+
+pkcs-7-CMSVersion ::= INTEGER  { v0(0), v1(1), v2(2), v3(3), v4(4) }
+
+pkcs-7-DigestAlgorithmIdentifiers ::= SET OF pkcs-7-DigestAlgorithmIdentifier
+
+pkcs-7-DigestAlgorithmIdentifier ::= AlgorithmIdentifier
+
+pkcs-7-EncapsulatedContentInfo ::= SEQUENCE {
+  eContentType pkcs-7-ContentType,
+  eContent [0] EXPLICIT OCTET STRING OPTIONAL }
+
+-- We don't use CertificateList here since we only want
+-- to read the raw data.
+pkcs-7-CertificateRevocationLists ::= SET OF ANY
+
+pkcs-7-CertificateChoices ::= CHOICE {
+-- Although the paper uses Certificate type, we
+-- don't use it since, we don't need to parse it.
+-- We only need to read and store it.
+  certificate ANY
+}
+
+pkcs-7-CertificateSet ::= SET OF pkcs-7-CertificateChoices
+
+pkcs-7-SignerInfos ::= SET OF ANY -- this is not correct but we don't use it
+ -- anyway
+
+
+-- BEGIN of RFC2986
+
+-- Certificate requests
+pkcs-10-CertificationRequestInfo ::= SEQUENCE {
+     version       INTEGER { v1(0) },
+     subject       Name,
+     subjectPKInfo SubjectPublicKeyInfo,
+     attributes    [0] Attributes
+}
+
+Attributes ::= SET OF Attribute
+
+pkcs-10-CertificationRequest ::= SEQUENCE {
+     certificationRequestInfo pkcs-10-CertificationRequestInfo,
+     signatureAlgorithm AlgorithmIdentifier,
+     signature          BIT STRING
+}
+
+-- stuff from PKCS#9
+
+pkcs-9-ub-challengePassword   INTEGER ::= 255
+
+pkcs-9-certTypes OBJECT IDENTIFIER ::= {pkcs-9 22}
+pkcs-9-crlTypes OBJECT IDENTIFIER ::= {pkcs-9 23}
+
+pkcs-9-at-challengePassword OBJECT IDENTIFIER   ::= {pkcs-9 7}
+
+pkcs-9-challengePassword        ::= CHOICE {
+      printableString       PrintableString (SIZE (1..pkcs-9-ub-challengePassword)),
+      utf8String            UTF8String (SIZE (1..pkcs-9-ub-challengePassword)) }
+
+pkcs-9-at-localKeyId               OBJECT IDENTIFIER ::= {pkcs-9 21}
+
+pkcs-9-localKeyId ::= OCTET STRING
+
+pkcs-9-at-friendlyName             OBJECT IDENTIFIER ::= {pkcs-9 20}
+
+pkcs-9-friendlyName ::= BMPString      (SIZE (1..255))
+
+-- PKCS #8 stuff
+
+-- Private-key information syntax
+
+pkcs-8-PrivateKeyInfo ::= SEQUENCE {
+  version pkcs-8-Version,
+  privateKeyAlgorithm AlgorithmIdentifier,
+  privateKey pkcs-8-PrivateKey,
+  attributes [0] Attributes OPTIONAL }
+
+pkcs-8-Version ::= INTEGER {v1(0)}
+
+pkcs-8-PrivateKey ::= OCTET STRING
+
+pkcs-8-Attributes ::= SET OF Attribute
+
+-- Encrypted private-key information syntax
+
+pkcs-8-EncryptedPrivateKeyInfo ::= SEQUENCE {
+    encryptionAlgorithm AlgorithmIdentifier,
+    encryptedData pkcs-8-EncryptedData
+}
+
+pkcs-8-EncryptedData ::= OCTET STRING
+
+-- PKCS #5 stuff
+
+pkcs-5 OBJECT IDENTIFIER ::=
+       { pkcs 5 }
+
+pkcs-5-encryptionAlgorithm OBJECT IDENTIFIER ::=
+       { iso(1) member-body(2) us(840) rsadsi(113549) 3 }
+
+pkcs-5-des-EDE3-CBC OBJECT IDENTIFIER ::= {pkcs-5-encryptionAlgorithm 7}
+
+pkcs-5-des-EDE3-CBC-params ::= OCTET STRING (SIZE(8))
+
+pkcs-5-id-PBES2 OBJECT IDENTIFIER ::= {pkcs-5 13}
+
+pkcs-5-PBES2-params ::= SEQUENCE {
+  keyDerivationFunc AlgorithmIdentifier,
+  encryptionScheme AlgorithmIdentifier }
+
+-- PBKDF2
+
+pkcs-5-id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12}
+
+-- pkcs-5-id-hmacWithSHA1 OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840) rsadsi(113549) 2 7}
+
+-- pkcs-5-algid-hmacWithSHA1 AlgorithmIdentifier ::=
+--   {algorithm pkcs-5-id-hmacWithSHA1, parameters NULL : NULL}
+
+pkcs-5-PBKDF2-params ::= SEQUENCE {
+  salt CHOICE {
+    specified OCTET STRING,
+    otherSource AlgorithmIdentifier
+  },
+  iterationCount INTEGER (1..MAX),
+  keyLength INTEGER (1..MAX) OPTIONAL,
+  prf AlgorithmIdentifier OPTIONAL -- DEFAULT pkcs-5-id-hmacWithSHA1
+}
+
+-- PKCS #12 stuff
+
+pkcs-12        OBJECT IDENTIFIER ::= {pkcs 12}
+
+pkcs-12-PFX ::= SEQUENCE {
+       version         INTEGER {v3(3)},
+       authSafe        pkcs-7-ContentInfo,
+       macData         pkcs-12-MacData OPTIONAL
+}
+
+pkcs-12-PbeParams ::= SEQUENCE {
+       salt    OCTET STRING,
+       iterations INTEGER
+}
+
+pkcs-12-MacData ::= SEQUENCE {
+       mac             pkcs-7-DigestInfo,
+       macSalt         OCTET STRING,
+       iterations      INTEGER DEFAULT 1
+-- Note: The default is for historical reasons and its use is
+-- deprecated. A higher value, like 1024 is recommended.
+}
+
+pkcs-12-AuthenticatedSafe ::= SEQUENCE OF pkcs-7-ContentInfo
+       -- Data if unencrypted
+       -- EncryptedData if password-encrypted
+       -- EnvelopedData if public key-encrypted
+
+pkcs-12-SafeContents ::= SEQUENCE OF pkcs-12-SafeBag
+
+pkcs-12-SafeBag ::= SEQUENCE {
+       bagId           OBJECT IDENTIFIER,
+       bagValue        [0] EXPLICIT ANY DEFINED BY badId,
+       bagAttributes   SET OF pkcs-12-PKCS12Attribute OPTIONAL
+}
+
+-- Bag types
+
+
+pkcs-12-bagtypes OBJECT IDENTIFIER ::= {pkcs-12 10 1}
+
+pkcs-12-keyBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 1}
+pkcs-12-pkcs8ShroudedKeyBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 2}
+pkcs-12-certBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 3}
+pkcs-12-crlBag OBJECT IDENTIFIER ::= {pkcs-12-bagtypes 4}
+
+pkcs-12-KeyBag ::= pkcs-8-PrivateKeyInfo
+
+-- Shrouded KeyBag
+
+pkcs-12-PKCS8ShroudedKeyBag ::= pkcs-8-EncryptedPrivateKeyInfo
+
+-- CertBag
+
+pkcs-12-CertBag ::= SEQUENCE {
+       certId    OBJECT IDENTIFIER,
+       certValue [0] EXPLICIT ANY DEFINED BY certId
+}
+
+-- x509Certificate BAG-TYPE ::= {OCTET STRING IDENTIFIED BY {pkcs-9-certTypes 1}}
+-- DER-encoded X.509 certificate stored in OCTET STRING
+
+pkcs-12-CRLBag ::= SEQUENCE {
+       crlId           OBJECT IDENTIFIER,
+       crlValue        [0] EXPLICIT ANY DEFINED BY crlId
+}
+
+-- x509CRL BAG-TYPE ::=
+--     {OCTET STRING IDENTIFIED BY {pkcs-9-crlTypes 1}}
+-- DER-encoded X.509 CRL stored in OCTET STRING
+
+pkcs-12-PKCS12Attribute ::= Attribute
+
+-- PKCS #7 stuff (needed in PKCS 12)
+
+pkcs-7-data OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+    us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 }
+
+pkcs-7-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2)
+    us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 }
+
+pkcs-7-Data ::= OCTET STRING
+
+pkcs-7-EncryptedData ::= SEQUENCE {
+    version pkcs-7-CMSVersion,
+    encryptedContentInfo pkcs-7-EncryptedContentInfo,
+    unprotectedAttrs [1] IMPLICIT pkcs-7-UnprotectedAttributes OPTIONAL }
+
+pkcs-7-EncryptedContentInfo ::= SEQUENCE {
+    contentType pkcs-7-ContentType,
+    contentEncryptionAlgorithm pkcs-7-ContentEncryptionAlgorithmIdentifier,
+    encryptedContent [0] IMPLICIT pkcs-7-EncryptedContent OPTIONAL }
+
+pkcs-7-ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
+
+pkcs-7-EncryptedContent ::= OCTET STRING
+
+pkcs-7-UnprotectedAttributes ::= SET SIZE (1..MAX) OF Attribute
+
+-- LDAP stuff
+-- may not be correct
+
+id-at-ldap-DC AttributeType ::= { 0 9 2342 19200300 100 1 25 }
+
+ldap-DC ::= IA5String
+
+id-at-ldap-UID AttributeType ::= { 0 9 2342 19200300 100 1 1 }
+
+ldap-UID ::= DirectoryString
+
+-- rfc3039
+
+id-pda  OBJECT IDENTIFIER ::= { id-pkix 9 }
+
+id-pda-dateOfBirth          AttributeType ::= { id-pda 1 }
+DateOfBirth ::=             GeneralizedTime
+
+id-pda-placeOfBirth         AttributeType ::= { id-pda 2 }
+PlaceOfBirth ::=            DirectoryString
+
+id-pda-gender               AttributeType ::= { id-pda 3 }
+Gender ::=                  PrintableString (SIZE(1))
+                            -- "M", "F", "m" or "f"
+
+id-pda-countryOfCitizenship AttributeType ::= { id-pda 4 }
+CountryOfCitizenship ::=    PrintableString (SIZE (2))
+                            -- ISO 3166 Country Code
+
+id-pda-countryOfResidence   AttributeType ::= { id-pda 5 }
+CountryOfResidence ::=      PrintableString (SIZE (2))
+                            -- ISO 3166 Country Code
+
+-- rfc3820
+
+id-pe-proxyCertInfo OBJECT IDENTIFIER ::= { id-pe 14 }
+
+id-ppl-inheritAll OBJECT IDENTIFIER ::= { id-pkix 21 1 }
+id-ppl-independent OBJECT IDENTIFIER ::= { id-pkix 21 2 }
+
+ProxyCertInfo ::= SEQUENCE {
+       pCPathLenConstraint     INTEGER (0..MAX) OPTIONAL,
+       proxyPolicy             ProxyPolicy }
+
+ProxyPolicy ::= SEQUENCE {
+       policyLanguage  OBJECT IDENTIFIER,
+        policy         OCTET STRING OPTIONAL }
+
+-- rfc3920 section 5.1.1
+
+id-on  OBJECT IDENTIFIER ::= { id-pkix 8 }  -- other name forms
+
+id-on-xmppAddr  OBJECT IDENTIFIER ::= { id-on 5 }
+
+XmppAddr ::= UTF8String
+
+END
+
+-- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+-- 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/>.
diff --git a/tests/threadsafety b/tests/threadsafety
new file mode 100755 (executable)
index 0000000..9f5243f
--- /dev/null
@@ -0,0 +1,175 @@
+#!/bin/sh
+
+# Copyright (C) 2004, 2005, 2007, 2009 Simon Josefsson
+#
+# 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/>.
+
+FILES="$@"
+FILES=${FILES:-$THREADSAFETY_FILES}
+EGREP=${EGREP:-egrep}
+
+if test -z "$FILES"; then
+    echo "Usage: $0 [FILE...]"
+    exit 1
+fi
+
+UNSAFE=""
+
+# Thread unsafe functions according to latest POSIX, see:
+# http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_09_01
+UNSAFE="$UNSAFE asctime"
+UNSAFE="$UNSAFE basename"
+UNSAFE="$UNSAFE catgets"
+UNSAFE="$UNSAFE crypt"
+UNSAFE="$UNSAFE ctime"
+UNSAFE="$UNSAFE dbm_clearerr"
+UNSAFE="$UNSAFE dbm_close"
+UNSAFE="$UNSAFE dbm_delete"
+UNSAFE="$UNSAFE dbm_error"
+UNSAFE="$UNSAFE dbm_fetch"
+UNSAFE="$UNSAFE dbm_firstkey"
+UNSAFE="$UNSAFE dbm_nextkey"
+UNSAFE="$UNSAFE dbm_open"
+UNSAFE="$UNSAFE dbm_store"
+UNSAFE="$UNSAFE dirname"
+UNSAFE="$UNSAFE dlerror"
+UNSAFE="$UNSAFE drand48"
+UNSAFE="$UNSAFE encrypt"
+UNSAFE="$UNSAFE endgrent"
+UNSAFE="$UNSAFE endpwent"
+UNSAFE="$UNSAFE endutxent"
+UNSAFE="$UNSAFE ftw"
+UNSAFE="$UNSAFE getc_unlocked"
+UNSAFE="$UNSAFE getchar_unlocked"
+UNSAFE="$UNSAFE getdate"
+UNSAFE="$UNSAFE getenv"
+UNSAFE="$UNSAFE getgrent"
+UNSAFE="$UNSAFE getgrgid"
+UNSAFE="$UNSAFE getgrnam"
+UNSAFE="$UNSAFE gethostent"
+UNSAFE="$UNSAFE getlogin"
+UNSAFE="$UNSAFE getnetbyaddr"
+UNSAFE="$UNSAFE getnetbyname"
+UNSAFE="$UNSAFE getnetent"
+UNSAFE="$UNSAFE getopt"
+UNSAFE="$UNSAFE getprotobyname"
+UNSAFE="$UNSAFE getprotobynumber"
+UNSAFE="$UNSAFE getprotoent"
+UNSAFE="$UNSAFE getpwent"
+UNSAFE="$UNSAFE getpwnam"
+UNSAFE="$UNSAFE getpwuid"
+UNSAFE="$UNSAFE getservbyname"
+UNSAFE="$UNSAFE getservbyport"
+UNSAFE="$UNSAFE getservent"
+UNSAFE="$UNSAFE getutxent"
+UNSAFE="$UNSAFE getutxid"
+UNSAFE="$UNSAFE getutxline"
+UNSAFE="$UNSAFE gmtime"
+UNSAFE="$UNSAFE hcreate"
+UNSAFE="$UNSAFE hdestroy"
+UNSAFE="$UNSAFE hsearch"
+UNSAFE="$UNSAFE inet_ntoa"
+UNSAFE="$UNSAFE l64a"
+UNSAFE="$UNSAFE lgamma"
+UNSAFE="$UNSAFE lgammaf"
+UNSAFE="$UNSAFE lgammal"
+UNSAFE="$UNSAFE localeconv"
+UNSAFE="$UNSAFE localtime"
+UNSAFE="$UNSAFE lrand48"
+UNSAFE="$UNSAFE mrand48"
+UNSAFE="$UNSAFE nftw"
+UNSAFE="$UNSAFE nl_langinfo"
+UNSAFE="$UNSAFE ptsname"
+UNSAFE="$UNSAFE putc_unlocked"
+UNSAFE="$UNSAFE putchar_unlocked"
+UNSAFE="$UNSAFE putenv"
+UNSAFE="$UNSAFE pututxline"
+UNSAFE="$UNSAFE rand"
+UNSAFE="$UNSAFE readdir"
+UNSAFE="$UNSAFE setenv"
+UNSAFE="$UNSAFE setgrent"
+UNSAFE="$UNSAFE setkey"
+UNSAFE="$UNSAFE setpwent"
+UNSAFE="$UNSAFE setutxent"
+UNSAFE="$UNSAFE strerror"
+UNSAFE="$UNSAFE strsignal"
+UNSAFE="$UNSAFE strtok"
+UNSAFE="$UNSAFE system"
+UNSAFE="$UNSAFE ttyname"
+UNSAFE="$UNSAFE unsetenv"
+UNSAFE="$UNSAFE wcstombs"
+UNSAFE="$UNSAFE wctomb"
+
+# Additional functions that aren't thread-safe if passed a NULL argument
+UNSAFE="$UNSAFE ctermid"
+UNSAFE="$UNSAFE tmpname"
+UNSAFE="$UNSAFE wcrtomb"
+UNSAFE="$UNSAFE wcsrtombs"
+
+# Legacy functions removed between issue 6 and 7, see:
+# http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html#tag_02_09_01
+UNSAFE="$UNSAFE ecvt"
+UNSAFE="$UNSAFE fcvt"
+UNSAFE="$UNSAFE gcvt"
+UNSAFE="$UNSAFE gethostbyaddr"
+UNSAFE="$UNSAFE gethostbyname"
+
+# Other (potentially) thread unsafe functions, see:
+# http://blog.josefsson.org/2009/06/23/thread-safe-functions/
+UNSAFE="$UNSAFE erand48"
+UNSAFE="$UNSAFE ether_aton"
+UNSAFE="$UNSAFE ether_ntoa"
+UNSAFE="$UNSAFE fgetgrent"
+UNSAFE="$UNSAFE fgetpwent"
+UNSAFE="$UNSAFE fgetspent"
+UNSAFE="$UNSAFE getaliasbyname"
+UNSAFE="$UNSAFE getaliasent"
+UNSAFE="$UNSAFE gethostbyname2"
+UNSAFE="$UNSAFE getmntent"
+UNSAFE="$UNSAFE getnetgrent"
+UNSAFE="$UNSAFE getrpcbyname"
+UNSAFE="$UNSAFE getrpcbynumber"
+UNSAFE="$UNSAFE getrpcent"
+UNSAFE="$UNSAFE getspent"
+UNSAFE="$UNSAFE getspnam"
+UNSAFE="$UNSAFE getutent"
+UNSAFE="$UNSAFE getutid"
+UNSAFE="$UNSAFE getutline"
+UNSAFE="$UNSAFE initstate"
+UNSAFE="$UNSAFE jrand48"
+UNSAFE="$UNSAFE lcong48"
+UNSAFE="$UNSAFE nrand48"
+UNSAFE="$UNSAFE qecvt"
+UNSAFE="$UNSAFE qfcvt"
+UNSAFE="$UNSAFE random"
+UNSAFE="$UNSAFE seed48"
+UNSAFE="$UNSAFE setstate"
+UNSAFE="$UNSAFE sgetspent"
+UNSAFE="$UNSAFE srand48"
+UNSAFE="$UNSAFE srandom"
+
+set -- $UNSAFE
+cmd="-e [^.>=_0-9a-z]($1"
+shift
+while test "$1"; do
+    cmd="${cmd}|$1"
+    shift
+done
+cmd="${cmd})[^.>=_0-9a-z]*\("
+
+if $EGREP $cmd $FILES; then
+    exit 1
+fi
+
+exit 0
diff --git a/windows/asn1-parser/asn1-parser.vcproj b/windows/asn1-parser/asn1-parser.vcproj
new file mode 100755 (executable)
index 0000000..d71e9c9
--- /dev/null
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8,00"\r
+       Name="asn1-parser"\r
+       ProjectGUID="{3E96D323-99DD-497F-991A-9316C9FFA99A}"\r
+       RootNamespace="asn1-parser"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\..\lib;.;..\gnulib;..\..\gl"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\..\lib;.;..\gnulib;..\..\gl"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\src\asn1Parser.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\config.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       >\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/windows/asn1-parser/config.h b/windows/asn1-parser/config.h
new file mode 100755 (executable)
index 0000000..50f98e7
--- /dev/null
@@ -0,0 +1 @@
+#define HAVE_GETOPT_H 1
diff --git a/windows/gnulib/getopt.h b/windows/gnulib/getopt.h
new file mode 100755 (executable)
index 0000000..d8c6e4d
--- /dev/null
@@ -0,0 +1,2 @@
+#define HAVE_GETOPT_LONG 1\r
+#include "getopt_.h"
diff --git a/windows/gnulib/gnulib.vcproj b/windows/gnulib/gnulib.vcproj
new file mode 100755 (executable)
index 0000000..8808579
--- /dev/null
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8,00"\r
+       Name="gnulib"\r
+       ProjectGUID="{0C4318E2-FFD7-40DC-945C-40016B10665C}"\r
+       RootNamespace="gnulib"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="4"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="."\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="."\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\gl\getopt.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\gl\getopt1.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath=".\getopt.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\gl\getopt_.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\gl\getopt_int.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\gl\gettext.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       >\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/windows/libtasn1.ncb b/windows/libtasn1.ncb
new file mode 100755 (executable)
index 0000000..e8ad3b8
Binary files /dev/null and b/windows/libtasn1.ncb differ
diff --git a/windows/libtasn1.sln b/windows/libtasn1.sln
new file mode 100755 (executable)
index 0000000..1c93911
--- /dev/null
@@ -0,0 +1,54 @@
+\r
+Microsoft Visual Studio Solution File, Format Version 9.00\r
+# Visual Studio 2005\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtasn1", "libtasn1\libtasn1.vcproj", "{4DE20933-A72B-4261-9B63-0DE9AF31DAB2}"\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-tree", "test-tree\test-tree.vcproj", "{53CDE0B4-BA0D-4911-8730-41B03CDC310A}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} = {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-parser", "test-parser\test-parser.vcproj", "{CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} = {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "asn1-parser", "asn1-parser\asn1-parser.vcproj", "{3E96D323-99DD-497F-991A-9316C9FFA99A}"\r
+       ProjectSection(ProjectDependencies) = postProject\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2} = {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}\r
+               {0C4318E2-FFD7-40DC-945C-40016B10665C} = {0C4318E2-FFD7-40DC-945C-40016B10665C}\r
+       EndProjectSection\r
+EndProject\r
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gnulib", "gnulib\gnulib.vcproj", "{0C4318E2-FFD7-40DC-945C-40016B10665C}"\r
+EndProject\r
+Global\r
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution\r
+               Debug|Win32 = Debug|Win32\r
+               Release|Win32 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Debug|Win32.Build.0 = Debug|Win32\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Release|Win32.ActiveCfg = Release|Win32\r
+               {4DE20933-A72B-4261-9B63-0DE9AF31DAB2}.Release|Win32.Build.0 = Release|Win32\r
+               {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Debug|Win32.Build.0 = Debug|Win32\r
+               {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Release|Win32.ActiveCfg = Release|Win32\r
+               {53CDE0B4-BA0D-4911-8730-41B03CDC310A}.Release|Win32.Build.0 = Release|Win32\r
+               {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Debug|Win32.Build.0 = Debug|Win32\r
+               {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Release|Win32.ActiveCfg = Release|Win32\r
+               {CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}.Release|Win32.Build.0 = Release|Win32\r
+               {3E96D323-99DD-497F-991A-9316C9FFA99A}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {3E96D323-99DD-497F-991A-9316C9FFA99A}.Debug|Win32.Build.0 = Debug|Win32\r
+               {3E96D323-99DD-497F-991A-9316C9FFA99A}.Release|Win32.ActiveCfg = Release|Win32\r
+               {3E96D323-99DD-497F-991A-9316C9FFA99A}.Release|Win32.Build.0 = Release|Win32\r
+               {0C4318E2-FFD7-40DC-945C-40016B10665C}.Debug|Win32.ActiveCfg = Debug|Win32\r
+               {0C4318E2-FFD7-40DC-945C-40016B10665C}.Debug|Win32.Build.0 = Debug|Win32\r
+               {0C4318E2-FFD7-40DC-945C-40016B10665C}.Release|Win32.ActiveCfg = Release|Win32\r
+               {0C4318E2-FFD7-40DC-945C-40016B10665C}.Release|Win32.Build.0 = Release|Win32\r
+       EndGlobalSection\r
+       GlobalSection(SolutionProperties) = preSolution\r
+               HideSolutionNode = FALSE\r
+       EndGlobalSection\r
+EndGlobal\r
diff --git a/windows/libtasn1.suo b/windows/libtasn1.suo
new file mode 100755 (executable)
index 0000000..aecc6ca
Binary files /dev/null and b/windows/libtasn1.suo differ
diff --git a/windows/libtasn1/libtasn1.vcproj b/windows/libtasn1/libtasn1.vcproj
new file mode 100755 (executable)
index 0000000..902a1c5
--- /dev/null
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8,00"\r
+       Name="libtasn1"\r
+       ProjectGUID="{4DE20933-A72B-4261-9B63-0DE9AF31DAB2}"\r
+       RootNamespace="libtasn1"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="4"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/DSIZEOF_UNSIGNED_LONG_INT=4 /DSIZEOF_UNSIGNED_INT=4"\r
+                               AdditionalIncludeDirectories="../../lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="4"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalOptions="/DSIZEOF_UNSIGNED_LONG_INT=4 /DSIZEOF_UNSIGNED_INT=4"\r
+                               AdditionalIncludeDirectories="../../lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLibrarianTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\lib\ASN1.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\coding.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\decoding.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\element.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\errors.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\gstr.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\parser_aux.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\structure.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\version.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\lib\windows\config.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\defines.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\element.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\errors.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\gstr.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\int.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\libtasn1.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\parser_aux.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\..\lib\structure.h"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       >\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/windows/test-parser/test-parser.vcproj b/windows/test-parser/test-parser.vcproj
new file mode 100755 (executable)
index 0000000..9e21ed1
--- /dev/null
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8,00"\r
+       Name="test-parser"\r
+       ProjectGUID="{CE8F8E2E-E5E9-43F6-A567-CB813B18C58A}"\r
+       RootNamespace="test-parser"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\..\lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\..\lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\tests\Test_parser.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       >\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r
diff --git a/windows/test-tree/test-tree.vcproj b/windows/test-tree/test-tree.vcproj
new file mode 100755 (executable)
index 0000000..524086a
--- /dev/null
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="Windows-1252"?>\r
+<VisualStudioProject\r
+       ProjectType="Visual C++"\r
+       Version="8,00"\r
+       Name="test-tree"\r
+       ProjectGUID="{53CDE0B4-BA0D-4911-8730-41B03CDC310A}"\r
+       RootNamespace="test-tree"\r
+       >\r
+       <Platforms>\r
+               <Platform\r
+                       Name="Win32"\r
+               />\r
+       </Platforms>\r
+       <ToolFiles>\r
+       </ToolFiles>\r
+       <Configurations>\r
+               <Configuration\r
+                       Name="Debug|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\..\lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalLibraryDirectories=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+               <Configuration\r
+                       Name="Release|Win32"\r
+                       OutputDirectory="$(SolutionDir)$(ConfigurationName)"\r
+                       IntermediateDirectory="$(ConfigurationName)"\r
+                       ConfigurationType="1"\r
+                       >\r
+                       <Tool\r
+                               Name="VCPreBuildEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCustomBuildTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXMLDataGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebServiceProxyGeneratorTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCMIDLTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCCLCompilerTool"\r
+                               AdditionalIncludeDirectories="..\..\lib"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManagedResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCResourceCompilerTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPreLinkEventTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCLinkerTool"\r
+                               AdditionalLibraryDirectories=""\r
+                       />\r
+                       <Tool\r
+                               Name="VCALinkTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCManifestTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCXDCMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCBscMakeTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCFxCopTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCAppVerifierTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCWebDeploymentTool"\r
+                       />\r
+                       <Tool\r
+                               Name="VCPostBuildEventTool"\r
+                       />\r
+               </Configuration>\r
+       </Configurations>\r
+       <References>\r
+       </References>\r
+       <Files>\r
+               <Filter\r
+                       Name="Source Files"\r
+                       Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
+                       UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
+                       >\r
+                       <File\r
+                               RelativePath="..\..\tests\Test_tree.c"\r
+                               >\r
+                       </File>\r
+               </Filter>\r
+               <Filter\r
+                       Name="Header Files"\r
+                       Filter="h;hpp;hxx;hm;inl;inc;xsd"\r
+                       UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"\r
+                       >\r
+               </Filter>\r
+               <Filter\r
+                       Name="Resource Files"\r
+                       Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"\r
+                       UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"\r
+                       >\r
+               </Filter>\r
+       </Files>\r
+       <Globals>\r
+       </Globals>\r
+</VisualStudioProject>\r